记一次生产环境的严重bug

朱雀 2022-04-22 18:18 417阅读 0赞

在系统部署生产环境后, 在十天左右就会出现系统反应慢, 堆爆了,cpu占用百分百的情况。 在重启tomcat后情况就恢复了。

在经过详细的 跟踪, 线程dump, 堆dump 下来分析后, 线程没有问题, 发现有两个原因:

1: 通过memory analyzer 分析 堆dump文件后, 有一个缓存对象无限增长,并保持活动, 导致回收不了, 堆爆掉。

2:由于后台 频繁gc, 导致系统响应慢,导致 liunx服务器的 time_wait 连接数量飙升, 参数没有设置: 将超时等待的连接用于新的连接。 导致前台请求不够。

解决方案:

1: 缓存对象 无限增长 回收不了的问题 解决方案为: 本来使用过后不用的对象应该移除的, 没有移除成功, 将此bug修复, 保持增长和移除相对稳定。

2: 超时等待的原因解决: 文章地址: https://www.aliyun.com/jiaocheng/810456.html

这个命令是查询连接数:

netstat -n | awk ‘/^tcp/ {++state[$NF]} END {for(key in state) print key,”/t”,state[key]}‘
TIME_WAIT 250263

TIME_WAIT 250263
CLOSE_WAIT 57
FIN_WAIT2 3
ESTABLISHED 2463
SYN_RECV 8

time_wait 数量过多:

可以修改系统的/etc/sysctl.conf配置来减少TIME_WAIT的tcp连接:
vi /etc/sysctl.conf
net.ipv4.tcp_syncookies = 1(某些情况下该参数已启用)
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30

然后执行/sbin/sysctl -p让参数生效。再用命令查看TIME_WAIT连接数 netstat -ae | grep “TIME_WAIT” |wc -l 发现大量的TIME_WAIT 已不存在。

这个图片为:出现卡顿时的 jvisualvm 的监控, cpu使用百分比, 频繁gc, 堆使用百分百。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Rhbmdfamlhbl9kb25n_size_16_color_FFFFFF_t_70

以下图片为 memory Analyzer 工具分析 堆dump文件的图像

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Rhbmdfamlhbl9kb25n_size_16_color_FFFFFF_t_70 1

以下图片为老区中 无限增长的对象的类名, 对象及大小。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Rhbmdfamlhbl9kb25n_size_16_color_FFFFFF_t_70 2

发表评论

表情:
评论列表 (有 0 条评论,417人围观)

还没有评论,来说两句吧...

相关阅读

    相关 生产环境严重bug

    在系统部署生产环境后, 在十天左右就会出现系统反应慢, 堆爆了,cpu占用百分百的情况。 在重启tomcat后情况就恢复了。 在经过详细的 跟踪, 线程dump, 堆dump

    相关 Layuibug

    当页面高度不够的时候,时间选择器会出现弹不出来的情况,代码中添加 ,trigger: ‘click’,以点击的方式触发即可. ![在这里插入图片描述][watermar