当前位置: 首页 > news >正文

网站开发技术的现状及发展趋势网创是什么

网站开发技术的现状及发展趋势,网创是什么,网页设计与制作常识,微信公众营销平台开发目录 一、问题介绍二、问题分析2.1 redis-cli 登录2.2 info clients 查看连接数情况2.3 client list 查看具体连接情况2.4 分析连接空闲时长2.5 client list 根据客户端IP统计连接数 三、问题结论和解决3.1 问题结论#xff1a;3.2 解决方案①#xff1a;优化程序3.3 解决方案… 目录 一、问题介绍二、问题分析2.1 redis-cli 登录2.2 info clients 查看连接数情况2.3 client list 查看具体连接情况2.4 分析连接空闲时长2.5 client list 根据客户端IP统计连接数 三、问题结论和解决3.1 问题结论3.2 解决方案①优化程序3.3 解决方案②扩大最大连接数3.4 解决方案③杀死指定连接 一、问题介绍 我们在日常的开发过程中经常会遇到 Redis 连接数不足 的情况报错如下所示 Caused by: org.redisson.client.RedisException: ERR max number of clients reached. channel Caused by: org.redisson.client.RedisException: ERR max number of clients reached. channel: [id: 0xf10fcc26, L:/192.168.30.13:64137 - R:192.168.1.163/192.168.1.163:6379] command: (SELECT), params: [1]at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:365)at org.redisson.client.handler.CommandDecoder.decodeCommand(CommandDecoder.java:209)at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:147)at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:117)at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:505)at io.netty.handler.codec.ReplayingDecoder.callDecode(ReplayingDecoder.java:366)at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:283)at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1421)at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:930)at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163)at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:697)at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:632)at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:549)at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:511)... 4 common frames omitted二、问题分析 ERR max number of clients reached. channel 报错是因为 Redis 的连接数不足 导致的。 2.1 redis-cli 登录 我们可以先使用如下命令登录 Redis 的客户端 redis-cli -h 127.0.0.1 -p 6379 -c --raw -ccluster选项是连接 Redis Cluster 结点需要使用的。-c 选项可以防止 moved 和 ask 异常。 --raw选项是反馈格式化后的结果默认选项。相对应的是 --no-raw即返回原始格式二进制。 2.2 info clients 查看连接数情况 查看 Redis 的当前连接数 info clients ##版本6.2.4相对5版本新增了部分显示信息##当前redis节点的客户端连接数 connected_clients:1 ##集群的连接数 cluster_connections:0 ##客户端最大连接数 maxclients:10000 ##当前所有输入缓冲区中队列对象个数的最大值 client_recent_max_input_buffer:24 ##当前所有输出缓冲区中占用的最大容量 client_recent_max_output_buffer:0 ##正在执行阻塞命令的客户端个数 blocked_clients:0 tracking_clients:0 clients_in_timeout_table:02.3 client list 查看具体连接情况 查看 Redis 的具体连接情况 client list id17750 addr192.168.1.254:35864 laddr172.17.0.3:6379 fd9615 name age266661 idle266661 flagsN db2 sub0 psub0 multi-1 qbuf0 qbuf-free0 argv-mem0 obl0 oll0 omem0 tot-mem20504 eventsr cmdselect userdefault redir-1 id2575 addr192.168.1.254:44133 laddr172.17.0.3:6379 fd1885 name age422195 idle422195 flagsN db2 sub0 psub0 multi-1 qbuf0 qbuf-free0 argv-mem0 obl0 oll0 omem0 tot-mem20504 eventsr cmdselect userdefault redir-1 id18212 addr192.168.1.254:61386 laddr172.17.0.3:6379 fd9929 name age266308 idle266308 flagsN db2 sub0 psub0 multi-1 qbuf0 qbuf-free0 argv-mem0 obl0 oll0 omem0 tot-mem20504 eventsr cmdselect userdefault redir-1 id13437 addr192.168.1.254:17625 laddr172.17.0.3:6379 fd6431 name age349287 idle349287 flagsN db2 sub0 psub0 multi-1 qbuf0 qbuf-free0 argv-mem0 obl0 oll0 omem0 tot-mem20504 eventsr cmdselect userdefault redir-1 id12730 addr192.168.1.254:15535 laddr172.17.0.3:6379 fd6226 name age350448 idle350448 flagsN db2 sub0 psub0 multi-1 qbuf0 qbuf-free0 argv-mem0 obl0 oll0 omem0 tot-mem20504 eventsr cmdselect userdefault redir-1官方文档 https://redis.io/docs/latest/commands/client-list/ client list 属性说明如下 属性说明id客户端连接IDaddr客户端连接IP和端口laddrredis数据库连接地址和端口fdsocket的文件描述符name客户端连接名age客户端连接存活时间idle客户端连接空闲时间单位秒。可以用于判断连接是否有没有被及时释放flags客户端类型标识db当前客户正在使用的数据库索引下标sub/psub当前客户端订阅的频道或模式数multi当前事务中已执行命令个数qbuf输入缓冲区总容量qbuf-free输入缓冲区剩余容量argv-mem下一个命令的不完整参数已从查询缓冲区中提取obl固定缓冲区的长度oll动态缓冲区列表的长度omem固定缓冲区和动态缓冲区使用的容量tot-mem此客户端在其各个缓冲区中消耗的总内存events文件描述符时间r:可读w:可写cmd当前客户端最后一次执行的命令不包含参数user用户名称默认defaultredir当前用户跟踪重定位的客户端ID 2.4 分析连接空闲时长 了解了以上的属性我们再反观刚才 client list 的执行结果可以看到 其中 idle客户端连接空闲时间和 age客户端连接存活时间的值基本一致说明大部分的连接是没有用到的。 2.5 client list 根据客户端IP统计连接数 命令如下 redis-cli -h 127.0.0.1 -p 6379 -c --raw client list | awk -F {print $2} | awk -F : {print $1} | sort | uniq -c | sort -nr | head -n 10docker 命令版 docker exec -it redis redis-cli client list | awk -F {print $2} | awk -F : {print $1} | sort | uniq -c | sort -nr | head -n 10执行结果 三、问题结论和解决 3.1 问题结论 从上面的问题分析可以看出问题原因是大部分连接被某一个IP占用导致的可能是Redis最小连接数配置错误或者程序Bug导致的。 3.2 解决方案①优化程序 可以根据客户端的IP和端口定位到客户端的具体应用进行优化但是如果客户端应用不是在你们部门维护的就不太好推进了。 3.3 解决方案②扩大最大连接数 方式一 在 redis.conf 配置文件中进行修改如下所示 # 设置最大连接数为10w maxclients 100000方式二 通过命令设置如下所示 config set maxclients 100000方式三 启动 redis.service 服务时添加参数 --maxclients 100000如下所示 redis-server --maxclients 100000 -f /ext/redis.conf验证 使用命令查看最大连接数如下所示 config get maxclients3.4 解决方案③杀死指定连接 可以在 redis 中使用如下命令杀死指定连接 # 方式一通过ip:port杀死 client kill ip:port # 方式二通过连接ID杀死 client kill id 5299可以使用如下命令针对指定 IP 的连接进行批量杀死例如批量杀死192.168.1.123的 3 个连接 redis-cli client list | grep 192.168.1.123 | awk -F {print \$1} | sed s/id//g | head -n 3 | xargs -n 1 redis-cli client kill id如果需要杀死所有连接可以去掉 head -n 3。 docker 命令版 docker exec -it redis sh -c redis-cli client list | grep 192.168.1.254 | awk -F {print \$1} | sed s/id//g | head -n 3 | xargs -n 1 redis-cli client kill id注意1 这里需要使用 sh -c 来包装整个命令确保命令在一个子 shell 中执行否则会报错 the input device is not a TTY。注意2 这里需要使用 xargs -n 1 来将 awk 筛选后的结果逐行执行-n 1 用于确保逐行执行否则会报错 (error) ERR syntax error。如果需要杀死所有连接可以去掉 head -n 3。 整理完毕完结撒花~ 参考地址 1.Redis:13–常用功能之redis-cli redis-server等命令https://cloud.tencent.com/developer/article/1784416 2.redis client list使用https://blog.csdn.net/weixin_44375561/article/details/121955791 3.[问题分析]redis客户端连接数过多大量空闲连接和readonly连接https://segmentfault.com/a/1190000020256823
http://www.w-s-a.com/news/281740/

相关文章:

  • 网站改版seo无锡有多少家公司
  • h5美食制作网站模板下载wordpress大学百度云
  • 零陵做网站建立网站的公司平台
  • 某企业电子商务网站建设网站开发实验结论
  • 自己做的网站突然打不开杭州哪些做网站公司好
  • 株洲专业建设网站免费cms内容管理系统
  • 网上建立网站赚钱网站建设方案书纯文字
  • 专业网站设计哪家好it外包合同模板
  • 个人网站备案都需要什么中小企业服务网
  • 佛山网站建设哪个在公司网站投简历该怎么做
  • 八戒网站做推广老域名全部失效请拿笔记好
  • iss服务器网站建设甘肃建设厅网站执业注册中心
  • 域名访问网站 过程网站 免费 托管运营
  • 下单的网站建设教程wordpress php7.1
  • 爱网站查询怎么做网站的图片跳转
  • 阿里云建站百度收录吗北京的设计公司排名
  • 网站制作方案包含哪些内容布吉网站建设方案
  • 吉林省建设安全信息网站宜宾市建设工程质量监督站网站
  • 镇江网站建设远航网络帝国cms 网站地图 自定义
  • 金融网站模板源代码net网站是国际域名吗
  • 北京高端网站建设价格企业网络托管公司
  • 规范门户网站建设没有网站可以做域名解析吗
  • pc 手机网站源码织梦网站修改教程视频教程
  • 江苏省建设厅副厅长网站济南网络建站模板
  • 工信部网站备案举报做网站竞争大吗
  • 网站建设经费管理注册了域名怎么做网站
  • 哪个着陆页网站福田做网站的公司
  • 网站备案完成后该如何做宁波公司网站建设价格
  • 标识标牌网站怎么做手机网站开发session
  • 怎样建设网站是什么样的广州做和改版网站的公司