前段时间,由于客户的AWS服务器配置较低,经常跑着跑着就CPU100%负载了,无法远程上机器排查问题,只能重启,重启后load下来日志,也没发现哪里报错,只是发现定时任务跑着跑着,就不跑了,程序也无法处理任何请求,无奈只能先重启恢复服务,再做监控。
用jconsole监控了当前执行的jar包,发现线程数一直在涨:
观察到是这个nioEventLoopGroup的线程数一直在增加,稍微搜了下,有说有可能是某些API导致的,于是想到,定时任务中就是每隔一分钟去推送一次IOS和安卓的消息,然后这个线程差不多也是每隔一分钟涨一个,于是去定位到代码,果然在IOS APNS推送代码处发现了端倪,居然每次都去new一个新的ApnsClient,果断改为init时初始化一遍即可,重新打包测试,nioEventLoopGroup线程数保持一个,不再增加。
至此,问题解决。
jconsole是jdk自带的监控软件,可以监控内存,线程等情况,挺好用。