当发现CPU或内存等资源消耗极高时, 需要确认是哪个进程、线程占用得多,为什么占用得多。
找到线程及其堆栈信息
- top指令 找到 进程id(pid)
- Shift+h 找到占用高的 线程id 2.1 先 top -p <pid> 2.2 再按Shift+h, 线程id列名是pid,但实际是线程id (或者直接 top -p <pid> -H) 2.3 将其值转为x16进制,可通过printf %x <线程id> && echo 得到
- 执行jstack查看地堆栈信息 jstack <pid> | grep -A 10 <16进制线程id>
查看TIMED_WAITING状态的连接数
jstack <pid> | grep TIMED_WAITING | wc -l
文件句柄数
文件句柄数不只包含文档,还包含线程、TCP连接等
设置最大句柄数
vim /etc/security/limits.conf 配置
- soft nproc 65535
- hard nproc 65535
- soft nofile 65535
- hard nofile 65535 重启生效 可通过ulimit -n 看当前设置
负载
CPU
推荐控制在80%以下
内存
虚拟内存最好0%
磁盘
iostat iotop
网络
nload