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
