一、top命令查找进程号
- PID:进程ID,进程的唯一标识符
- USER:进程所有者的实际用户名。
- PR:进程的调度优先级。这个字段的一些值是'rt'。这意味这这些进程运行在实时态。
- NI:进程的nice值(优先级)。NI的值处于[-20, 19],越小的值意味着越高的优先级。
- VIRT:进程使用的虚拟内存。默认是KB。
- RES:驻留内存大小。驻留内存是任务使用的非交换物理内存大小,默认是KB。
- SHR:SHR是进程使用的共享内存,默认是KB。
- S:这个是进程的状态。它有以下不同的值:
- D – 不可中断的睡眠态。
- R – 运行态
- S – 睡眠态
- T – 被跟踪或已停止
- Z – 僵尸态
- CPU:自从上一次更新时到现在任务所使用的CPU时间百分比。
- MEM:进程使用的可用物理内存百分比。
- TIME:任务启动后到现在所使用的全部CPU时间,精确到百分之一秒。
- COMMAND:运行进程所使用的命令。
二、 ps -mp [进程号] -o THREAD,tid,time 命令打印进程的线程情况
三、printf "%x\n" [线程号] 转换有问题线程号为16进制
四、jstack [进程号] | grep [十六进制线程号] -A100 找出线程的堆栈信息
CPU标高原因总结:
1.死循环或超大循环
2.频繁创建对象触发Yang GC eg:不分页获取大量数据在内存中转换javabean
3.超大浮点运算 eg:3D渲染等等
4.超多线程或连接池,cpu用于线程调度