cpu利用率高定位流程笔记

≯℡__Kan透↙ 提交于 2020-10-27 17:44:53

一、用到的一些命令

taskset:调整进程使用的cpu

perf top:用于观察系统和软件内性能开销最大的函数列表

top:监控查看cpu、内存等使用情况

strace:用到-f(子进程) 和-p(进程id)参数,用于跟踪进程执行情况

ps:-m(thread) -p(pid) -o用户指定显示的信息 

二、定位流程

1、管理平面运行在cpu 0上,通过top命令查看cpu 0没有idle cpu资源:

1.jpg

2、查看函数消耗cpu资源数:

taskset -c 0 perf top -C 0

2.jpg

可以看到第libc库的函数一直被调用

3、查看进程执行时间,可以看到exec时间远远大于sleep时间,说明占cpu时间很长:

cat /proc/sched_debug

3.jpg

4、进一步查看进程以及进程下的线程执行时间和占用cpu资源,可以看到占用cpu很高:

4.jpg

5、跟踪进程执行情况,发现一直在死循环:

strace –fp 3686

msgsnd(1966081, {0, "type=\"security\" time=\"2020-06-02"...}, 1296, IPC_NOWAIT) = -1 EINVAL (Invalid argument)
stat("/var/log/tos_alarmd.log", {st_mode=S_IFREG|0600, st_size=1506021, ...}) = 0
write(19, "errno = 22\n", 11)           = 11
msgget(0x9999, IPC_CREAT|0666)          = 1966081
msgsnd(1966081, {0, "type=\"security\" time=\"2020-06-02"...}, 1296, IPC_NOWAIT) = -1 EINVAL (Invalid argument)
stat("/var/log/tos_alarmd.log", {st_mode=S_IFREG|0600, st_size=1506032, ...}) = 0
write(19, "errno = 22\n", 11)           = 11
msgget(0x9999, IPC_CREAT|0666)          = 1966081
msgsnd(1966081, {0, "type=\"security\" time=\"2020-06-02"...}, 1296, IPC_NOWAIT) = -1 EINVAL (Invalid argument)
stat("/var/log/tos_alarmd.log", {st_mode=S_IFREG|0600, st_size=1506043, ...}) = 0
write(19, "errno = 22\n", 11)           = 11
msgget(0x9999, IPC_CREAT|0666)          = 1966081
msgsnd(1966081, {0, "type=\"security\" time=\"2020-06-02"...}, 1296, IPC_NOWAIT) = -1 EINVAL (Invalid argument)
stat("/var/log/tos_alarmd.log", {st_mode=S_IFREG|0600, st_size=1506054, ...}) = 0
write(19, "errno = 22\n", 11)           = 11
msgget(0x9999, IPC_CREAT|0666)          = 1966081
msgsnd(1966081, {0, "type=\"security\" time=\"2020-06-02"...}, 1296, IPC_NOWAIT) = -1 EINVAL (Invalid argument)
stat("/var/log/tos_alarmd.log", {st_mode=S_IFREG|0600, st_size=1506065, ...}) = 0
write(19, "errno = 22\n", 11)           = 11
msgget(0x9999, IPC_CREAT|0666)          = 1966081
msgsnd(1966081, {0, "type=\"security\" time=\"2020-06-02"...}, 1296, IPC_NOWAIT) = -1 EINVAL (Invalid argument)
stat("/var/log/tos_alarmd.log", {st_mode=S_IFREG|0600, st_size=1506076, ...}) = 0
write(19, "errno = 22\n", 11)           = 11
msgget(0x9999, IPC_CREAT|0666)          = 1966081
msgsnd(1966081, {0, "type=\"security\" time=\"2020-06-02"...}, 1296, IPC_NOWAIT) = -1 EINVAL (Invalid argument)
stat("/var/log/tos_alarmd.log", {st_mode=S_IFREG|0600, st_size=1506087, ...}) = 0
write(19, "errno = 22\n", 11)           = 11

6、查看对应进程模块,找到在这里产出死循环:

5.jpg

就是因为struct mymsg buff.mtype = 0;导致。

7、内核中的mtype应该大于等于1:

6.jpg

设备卡,cpu利用率高的问题就是通过上面流程基本就定位出来,记录笔记。


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!