linux下cpu或者内存持续升高问题排查方法
- 2014-05-25 16:49:28
- 运维
- 50
- shevechco
1.CPU持续升高,导致系统响应慢,可以根据下面方法进行排查
可以先查看负载情况
uptime
12:48:18 up 6:18, 4 users, load average: 0.06, 0.06, 0.01
如果系统负载超过CPU核数的3倍,则可以认为系统过载,但也还是分为各种情况,实际5,6倍就是CPU负载饱和状态。
一般cpu持续升高大概率是因为某些进程导致,可以使用top命令按照cpu利用率排序
top -o +%CPU
可以使用pidstat命令进行检查
pidstat -p <pid> 1
也可以使用strace命令来跟踪异常进程的系统调用情况
strace -p <pid>
2.内存持续升高,和OOM问题可以根据下面经验进行排查
首先可以使用free -h查看内存使用情况
使用htop或者top命令查看占用内存高的进程,并获取PID
top -o +%MEM
也可以使用ps命令直接排序当前资源使用较多的
ps -eo pid,lwp,cmd,%mem,%cpu --sort=-%mem | head
可以使用pmap命令查看特定的进程映射情况
pmap -x <pid>
也可以使用dmesg命令查看内核消息,例如检查OOM是否有OOM killer的动作记录
dmesg | grep -i oom
OOM Killer相关的优化,
vm.overcommit_memory设置为0可能会导致OOM killer频繁启动,1表示启发式,2表示总是允许,0表示总是拒绝除非预留足够内存。
sysctl -w vm.overcommit_memory=2
禁用动态地址分配以避免OOM killer误杀网络相关进程。
echo 0 > /proc/sys/net/ipv4/ip_dynaddr
调整overcommit_ratio的值。默认通常是50
echo 50 > /proc/sys/vm/overcommit_ratio
调整OOM killer的内存预留,单位可以是K、M或G。设置为0则禁用预留
echo 1024m > /proc/sys/vm/overcommit_kbytes
3.然后也可以查看日志文件和系统日志进行问题和程序的定位
cat /var/log/syslog | grep <process_name>
内容版权声明:除非注明,否则皆为本站原创文章。
转载注明出处:http://www.sulao.cn/post/11