一次服务器CPU升高的问题分析过程

1、检查占有cpu较高的进程和线程信息
ps H -e -o pid,tid,pcpu,cmd –sort=pcpu |more

3765 4254 6.3 receiver 0
3835 3835 6.5 sender 0
3781 4108 6.5 receiver 4
3781 4107 6.5 receiver 4
3837 3837 6.5 sender 1
3781 4094 6.5 receiver 4
2、分析占有cpu最高的进程的系统调用,确认什么操作导致繁忙
strace -o output.txt -T -tt -e trace=all -p 3767
tail -f output.txt

10:19:10.540731 nanosleep({0, 1000000}, NULL) = 0 <0.001125>
10:19:10.542406 accept(13, 0x7fff44967490, [16]) = -1 EAGAIN (Resource temporarily unavailable) <0.000214>
10:19:10.543076 nanosleep({0, 1000000}, NULL) = 0 <0.001127>
10:19:10.544876 accept(13, 0x7fff44967490, [16]) = -1 EAGAIN (Resource temporarily unavailable) <0.000222>
10:19:10.546111 nanosleep({0, 1000000}, NULL) = 0 <0.001307>
确认为频繁循环执行导致

分析linux各进程占有内存和swap数据库的脚本工具

Linux下没有工具能够快速统计所有进程占有内存和swap大小的工具,以下脚本可以完成该任务。
ps -eo pid,comm|while read line
do
SWAPSUM=0
MEMSUM=0
PID=`echo $line|awk ‘{print $1}’`
PROGNAME=`echo $line|awk ‘{print $2}’`
MEMSUM=`grep -i rss /proc/$PID/smaps 2>/dev/null|awk ‘BEGIN{sum=0}{sum+=$2}END{print sum}’`
SWAPSUM=`grep -i swap /proc/$PID/smaps 2>/dev/null|awk ‘BEGIN{sum=0}{sum+=$2}END{print sum}’`
if [ $MEMSUM -eq 0 ]
then
continue
else
echo “PID=$PID – MEM Resident: $MEMSUM Swap used: $SWAPSUM – ($PROGNAME )”
fi
done