Linux问题
如果服务应用部署在 Linux 上,CPU 打满后,想查看哪个进程导致的,用什么命令?
top
命令
top
是一个实时显示系统状态的工具,它可以显示系统中各个进程的资源使用情况,包括 CPU、内存的占用情况。
显示内容包括每个进程的 PID、用户、CPU 使用率(%CPU)、内存使用率(%MEM)等。
在 top
界面中按下 P
键,可以按 CPU 占用率从高到低排序,找出占用 CPU 较高的进程。
ps
命令
如果只想查看 CPU 占用率高的进程,可以使用 ps
命令结合 sort
进行排序。
通过以下命令查看 CPU 使用率最高的进程:
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head
-e
:显示所有进程-o
:指定显示的列,pid
是进程 ID,cmd
是进程名称,%mem
和%cpu
是内存和 CPU 的使用率--sort=-%cpu
:按 CPU 使用率排序head
:只显示前几行
pidstat
命令
pidstat
是一个比较详细的进程统计工具,专门用来监控某个进程的 CPU 使用情况。
使用
pidstat
查看每个进程的 CPU 使用情况pidstat -u 1
该命令每隔 1 秒刷新一次,显示所有进程的 CPU 使用情况。
要查看某个进程的具体哪个线程导致了 CPU 使用率过高,可以使用以下步骤和命令:
使用 top
查看线程信息
top
命令可以查看线程的 CPU 占用情况。通过以下操作,可以将 top
设置为显示线程(而不仅是进程)的视图。
- 在
top
界面按H
键(大写),这样top
就会切换到线程模式,显示每个线程的 CPU 占用情况。
在这种模式下,线程 ID(PID
列)会显示为每个线程的标识符,%CPU
列显示线程的 CPU 使用率,COMMAND
列显示线程所属进程的命令名称。
使用 ps
查看进程的线程
ps
命令可以结合 -L
选项,显示某个进程的所有线程信息。
查看进程的所有线程:
ps -Lp <pid>
其中
是目标进程的进程 ID。输出中,LWP列(Light Weight Process)代表线程 ID(可以理解为线程的 PID),%CPU列显示每个线程的 CPU 使用情况。
想查看代码中哪个位置导致的 CPU 高,该怎么做?Java 应用怎么排查 CPU 或内存占用率过高的问题?
使用 top
或 htop
找到占用高 CPU/内存的进程。
使用 jstack
或 jvisualvm
查看线程栈,定位高占用的线程和代码位置。
使用 jmap
分析堆内存,查找内存占用过高的对象。
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment