1. 查看进程的运行堆栈信息命令 gstack
gstack
是 Linux 系统下用于查看指定进程运行时堆栈信息的工具。当程序出现崩溃、死锁或者性能瓶颈等问题时,借助 gstack
可以查看进程中各个线程的调用栈,从而辅助开发人员定位问题。
-
定义
gstack
本质上是一个封装了底层 ptrace
系统调用的工具。ptrace
允许一个进程控制另一个进程的执行,gstack
利用它附加到目标进程上,暂停目标进程的执行,然后读取并格式化输出每个线程的堆栈信息。
-
要点
- 命令格式:
gstack <进程 ID>
,需准确提供目标进程的 ID。 - 权限问题:通常要以 root 用户或者与目标进程相同的用户身份执行,否则可能因权限不足无法获取堆栈信息。
- 信息解读:堆栈信息按栈顶到栈底顺序展示函数调用顺序,栈顶为当前正在执行的函数。
-
应用
在 Java 开发中,若 Java 程序出现死锁,可先使用 ps -ef | grep java
查找 Java 进程 ID,假设为 1234
,然后在 shell 中执行:
shell
gstack 1234
此命令会输出该 Java 进程中所有线程的堆栈信息,通过分析这些信息,能找出可能处于死锁状态的线程及其调用栈。
2. Linux 查看进程消耗的资源
在 Linux 系统中,有多种命令可用于查看进程消耗的资源,涵盖 CPU、内存、磁盘 I/O 和网络 I/O 等方面。常用命令有 top
、htop
、ps
和 lsof
。
-
定义
top
:实时显示系统中各个进程的资源使用情况,默认按 CPU 使用率排序,能直观呈现系统资源的动态变化。htop
:top
的增强版,界面更友好,支持鼠标操作,可清晰展示各进程的资源占用状况。ps
:用于查看进程的基本信息,结合不同选项可获取进程的 CPU 和内存使用情况。lsof
:用于查看进程打开的文件和网络连接,通过分析这些信息可了解进程的磁盘 I/O 和网络 I/O 情况。
-
要点
- 实时性:
top
和htop
适合实时监控进程资源使用,ps
常用于获取某一时刻的进程信息。 - 信息筛选:可根据需求使用不同选项筛选和排序信息,如按 CPU 或内存使用率排序。
- 资源类型:不同命令关注的资源类型有别,
top
和ps
侧重 CPU 和内存,lsof
关注文件和网络连接。
-
应用
在 Java 开发中,若要优化 Java 程序性能,可使用以下命令:
- 使用
top
实时监控 Java 进程的 CPU 和内存使用率:
shell
top
进入 top
界面后,按 P
键按 CPU 使用率排序,按 M
键按内存使用率排序。
- 使用
ps
查看 Java 进程的 CPU 和内存使用情况:
shell
ps -eo pid,user,%cpu,%mem,args | grep java
此命令会输出所有 Java 进程的 ID、用户、CPU 使用率、内存使用率和进程命令行参数。
- 使用
lsof
查看 Java 进程打开的文件和网络连接:
shell
lsof -p <Java 进程 ID>
将 <Java 进程 ID>
替换为实际的 Java 进程 ID,即可查看该进程打开的所有文件和网络连接。
3. SMP
SMP 即对称多处理(Symmetric Multi - Processing),是一种计算机体系结构,多个处理器(CPU)共享同一内存和 I/O 总线,每个处理器地位平等,可平等访问系统所有资源。
-
定义
SMP 系统基于共