代码人生的小狗窝

一行行枯燥的代码,却描绘出人生的点点滴滴

您现在的位置是:首页>_开源软件

进程cpu过高有关问题排查

发布时间:2019-11-22浏览(1321)

    进程cpu过高问题排查

    一,结合linux基本命令和jmap,jstack等工具。 

    1. 根据top命令,发现PID为28555的Java进程占用CPU高达200%,出现故障。

     

    1. 通过ps aux | grep PID命令,可以进一步确定是哪个进程出现了问题。怎么定位到具体线程或者代码呢? 
    2. 显示当前java进程的线程列表

    ps -mp pid -o THREAD,tid,time

    从中可以找到了耗时最高的线程28802。 

    1. 其次将需要的线程ID转换为16进制格式:

    printf "%x\n" tid

     

    1. 本地打印线程的堆栈信息*(注意主工程由于{}JVM Xms{}设置非常大,不可线上运行时执行!*

    jstack pid |grep tid -A 30

    这样,对应异常找到出现问题的代码。 

     

    二,linux常用确认服务状态命令。

    统计tcp连接状态: netstat -n | awk '/^tcp/ {++S[$NF]} END{for(a in S) print a, S[a]}'

    统计用户进程当前操作句柄数:lsof -n|awk '{print $2}|'|sort|uniq -c |sort -nr|more

    统计用户进程内部执行的线程数:ps -eLf|grep java|wc --l

    查看运行时进程参数设置:cat /proc/pid/limits,cpuset及coredump_filter

    查看当前某端口连接数:netstat -nat|grep -i  "80" |wc -l 

    对连接的IP按连接数量进行排序:netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n (运维操作已放弃netstat,改为ss命令入侵更轻量)

    Tcpdump访嗅访问数据包最高请求:tcpdump -i eth0 -tnn dst port 80 -c 1000