后台服务运行一段时间后,就停住不动了不再打印新的日志了,但是服务进程没有停止

Blade 已结 1 418
zxjsn01
zxjsn01 剑者 2022-06-13 14:07

一、该问题的重现步骤是什么?

1. 后台服务运行一段时间后,就停住不动了不再打印新的日志了,但是服务进程没有停止,报错信息如下

2. 

3.


二、你期待的结果是什么?实际看到的又是什么?


三、你正在使用的是什么产品,什么版本?在什么操作系统上?


四、请提供详细的错误堆栈信息,这很重要。


五、若有更多详细信息,请在下面提供。



image.png

image.png

1条回答
  •  yinyuncan
    yinyuncan (最佳回答者)
    2022-06-14 16:04


    1. 因为线上环境问题

    linux 底层会限制每个进程或用户打开的文件句柄数(socket也被视为文件),并且默认值非常小 ,所以 被使用完就会报这个


    查看限制文件句柄数大小 fs.file-max

    sudo /sbin/sysctl fs.file-max


    检查进程打开的文件句柄数

    jps
    
    3289 ympark2021.jar
    
    lsof -p 3289 | wc -l
    
    817

    如果不确定哪个进程占用了的文件句柄数 可以运行以下命令,该命令将返回每个进程的文件句柄数

    lsof | awk '{printt $2}' | sort | uniq -c | sort -n

    如果进程句柄的数量大于fs.file-max怎么办?可以按如下方式增加 fs.file-max的值:

    sudo /sbin/sysctl -w fs.file-max=<值>





    还需要检查的就是socket(套接字)文件的大小

    netstat -tulpn | grep pid

    从 netstat 输出中 看到少量的TIME_WAIT套接字 这是正常的。


    如果你检测到成百上千个活动的 TIME WAIT 套接字,你就应该当心了,如果发生这种情况,

    应该做一些内核网络参数配置优化 或者 减少客户端的 TCP 连接


    检查内核网络参数 /etc/sysctl.conf文件:

     

    cat /etc/sysctl.conf
    
    vm.swappiness = 0
    net.ipv4.neigh.default.gc_stale_time=120
    
    # see details in https://help.aliyun.com/knowledge_detail/39428.html
    net.ipv4.conf.all.rp_filter=0
    net.ipv4.conf.default.rp_filter=0
    net.ipv4.conf.default.arp_announce = 2
    net.ipv4.conf.lo.arp_announce=2
    net.ipv4.conf.all.arp_announce=2
    
    # see details in https://help.aliyun.com/knowledge_detail/41334.html
    net.ipv4.tcp_max_tw_buckets = 5000
    net.ipv4.tcp_syncookies = 1
    net.ipv4.tcp_max_syn_backlog = 1024
    net.ipv4.tcp_synack_retries = 2
    
    net.ipv6.conf.all.disable_ipv6 = 1
    net.ipv6.conf.default.disable_ipv6 = 1
    net.ipv6.conf.lo.disable_ipv6 = 1
    
    kernel.sysrq=1
    vm.swappiness = 0


        内核参数设置和说明请参考阿里云的 这个写的专业的多

    https://help.aliyun.com/knowledge_detail/41334.html

       2. 因为程序问题

         检查你的程序是否有没有正确关闭连接,socket / io / 数据库连接 等等


     

    0 讨论(1)
提交回复