您的位置:首页 > 汽车 > 时评 > Linux CPU占用高问题

Linux CPU占用高问题

2024/9/12 23:44:15 来源:https://blog.csdn.net/wangchao2679/article/details/139280103  浏览:    关键词:Linux CPU占用高问题

1、top命令和历史系统监控找出持续占用CPU的top5进程。

# top -c

依次按键盘键b->x,按照CPU由高到底排序。shift+P和shift+M切换使用CPU和内存的排序

# top -Hp pid

查看进程中所有线程的占用情况

# top -Hp 1124 -n 1 -b | awk '{print $NF}' | sort | uniq -c | sort -nrk 1

对线程进行统计和排序

2、使用pidstat命令查询CPU占用详细信息,是内核态还是用户态

# pidstat -p pid 1

1s刷新一次

# pidstat -r -p pid 1

进程占用的内存信息

3、使用lsof命令检查进程打开的文件

# lsof -p pid

4、通过strace抓取系统调用

#  strace -o output.txt -T -tt -e trace=all -p pid

输出在output.txt文件中

5、通过gdb抓取堆栈

# gdb

pstack pid

gdb -p pid

info thread

thread 2

bt

frame 3

p mutext_1

6、如果环境没有strace和gdb, 也可以通过cat stack查看进程的内核堆栈的调试信息

# cd /proc/1483/

#  cat stack

7、还可以使用操作系统提供的内核追踪工具ftrace抓取系统调用, ARM环境和X86环境命令不同。此处通过kprobe内核探针, Event Tracing事件追踪利用在内核中加入各种Tracepoint(追踪点)实现对系统的追踪。

# cd /sys/kernel/debug/tracing/

a. 增加探针

ARM环境

#  echo 'p:myprobe do_sys_open dfd=%x0 filename=+0(%x1):string flags=%x2 mode=%x3' > /sys/kernel/debug/tracing/kprobe_events

X86环境

# echo 'p:myprobe do_sys_open dfd=%ax filename=%dx flags=%cx mode=+4($stack)' > /sys/kernel/debug/tracing/kprobe_events

具体内核函数的定义,可以在百度搜索,都是开源代码

b. 使能event

 # echo 1 > /sys/kernel/debug/tracing/events/kprobes/myprobe/enable

c. 指定调试进程

#  echo pid > /sys/kernel/debug/tracing/set_event_pid

d. 使能系统内核trace

# echo 1 > /sys/kernel/debug/tracing/tracing_on

e. 抓取信息保持几分钟,内容重镜像到文件中

# cat /sys/kernel/debug/tracing/trace_pipe  >> /tmp/testtrace.log

关闭trace_event

 # echo 0 > /sys/kernel/debug/tracing/events/kprobes/myprobe/enable

# echo '-:myprobe' >> /sys/kernel/debug/tracing/kprobe_events

# echo 0 > /sys/kernel/debug/tracing/tracing_on

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com