java在centos系统运行,经过大量用户使用后,我们使用那些监听手段来判断服务器是否达到我们理想要求呢,判断服务器使用可以继续使用呢?
![33028faf13e0e97b0bc9bac3f45a6db0.png](https://img-blog.csdnimg.cn/img_convert/33028faf13e0e97b0bc9bac3f45a6db0.png)
我们以进程PID9496(监听端口:9624)为对象说明,启动时间为2019年4月2日,至今天,已经运行了半个月以上了。
首先使用top命令,监控该进程运行环境情况,查看整个系统空闲内存和cup,查看该进程本身内存和cup使用情况。
启动初期表现:
![83421557588b6162c55c7d98375adb7b.png](https://img-blog.csdnimg.cn/img_convert/83421557588b6162c55c7d98375adb7b.png)
运行1周表现:
![347945bfa83814215bcef7fb95969f2d.png](https://img-blog.csdnimg.cn/img_convert/347945bfa83814215bcef7fb95969f2d.png)
半月表现:
![d3a5f4f29ef4ab8afc7138c31ab0af23.png](https://img-blog.csdnimg.cn/img_convert/d3a5f4f29ef4ab8afc7138c31ab0af23.png)
通过这三张图表现,内容和cup都控制的非常好,没有出现内存堆积情况(有人说java不能考虑内存泄漏的问题,因为有自己垃圾回收机制,只能说明他对java不够了解)。如果发现内存持续递增,就需要通过jmap来分析(以前文章《上线项目:java服务器内存爆满导致宕机-实操方法》,过了这里就不说了)。
除了监控进程本身运行情况,还要查看tcp连接情况。
命令:netstat -tn |grep 9624 (依照实际端口为列)
![b1d20e1b6349eac9b140650075b24d5d.png](https://img-blog.csdnimg.cn/img_convert/b1d20e1b6349eac9b140650075b24d5d.png)
分析这些连接是真正用户还是用户已经断开了,但是服务器却没有回收的,如果发现大量残存tcp连接,说明了服务器代码中,没有关闭socket连接,处理这个bug就好看编程人员的经验和功底了(希望大家遇到了都可以很好处理)。
命令:netstat -an | awk '/^tcp/ {++y[$NF]} END {for(w in y) print w, y[w]}'
![c25d6da5baf7db98ba22f9a9672e5a19.png](https://img-blog.csdnimg.cn/img_convert/c25d6da5baf7db98ba22f9a9672e5a19.png)
使用这个命令查看所有的网络连接情况,特别注意两个close_wait和time_wait的数据,如果是过高,请参照我以前文章 《centos7.4内核调优,tcp单服务器万级并发》 内核调优。
最后感谢各位的阅读。
![c63a15280407828b077f741931ff95b0.png](https://img-blog.csdnimg.cn/img_convert/c63a15280407828b077f741931ff95b0.png)