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 &gt; /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

相关推荐