正在加载,请稍候…

strace、lsof 和 ps:Linux 进程与系统调试

使用 strace、lsof、ps 和 netstat 有效调试 Linux 进程、文件描述符、网络连接和系统调用。

strace、lsof 和 ps:Linux 进程与系统调试

strace、lsof 和 ps:Linux 进程与系统调试

了解 Linux 系统内部运行情况的基本工具。

ps - 进程快照

# 所有进程的详细信息
ps aux

# 进程树
ps auxf

# 查找特定进程
ps aux | grep nginx

# 按用户查看进程
ps -u www-data

# 自定义格式
ps -eo pid,ppid,user,%cpu,%mem,cmd --sort=-%mem | head -20

# 实时监控进程
watch -n1 'ps aux --sort=-%cpu | head -10'

strace、lsof 和 ps:Linux 进程与系统调试插图

top / htop

# 交互式 CPU/内存监控
top

# 更好的版本
htop

# 在 top 中按内存排序
top -o %MEM

# htop 快捷键
# F2: 设置, F3: 搜索, F4: 过滤
# F5: 树形视图, F6: 排序, F9: 终止

strace、lsof 和 ps:Linux 进程与系统调试插图

lsof - 列出打开的文件

# 所有打开的文件
lsof

# 按进程查看打开的文件
lsof -p 1234

# 按用户查看打开的文件
lsof -u www-data

# 网络连接
lsof -i

# TCP 连接
lsof -i TCP

# 特定端口
lsof -i :8080

# 目录中的文件
lsof +D /var/log/nginx

# 查找使用某个文件的进程
lsof /path/to/file

strace、lsof 和 ps:Linux 进程与系统调试插图

netstat / ss

# 所有监听端口
ss -tlnp
netstat -tlnp

# 所有连接
ss -anp

# 检查特定端口
ss -tlnp | grep ':80'

# 显示路由表
netstat -r
ip route show

strace - 系统调用跟踪器

# 跟踪进程系统调用
strace ls /tmp

# 跟踪正在运行的进程
strace -p 1234

# 仅显示文件相关调用
strace -e trace=file ls /tmp

# 仅显示网络调用
strace -e trace=network curl http://example.com

# 统计并汇总调用
strace -c ls /tmp

# 跟踪子进程
strace -f nginx

# 保存到文件
strace -o /tmp/trace.log myapp

实际调试场景

# 查找哪个进程在使用端口 3000
lsof -i :3000
# 或
fuser 3000/tcp

# 磁盘为什么满了?
lsof | grep deleted | awk '{print $7, $9}' | sort -rn | head

# 查找慢系统调用
strace -T -e trace=file myapp 2>&1 | awk '{print $NF, $0}' | sort -rn | head

# 内存泄漏调查
cat /proc/1234/status | grep -E "VmRSS|VmSize"

# 文件描述符限制
cat /proc/1234/limits | grep "open files"
ulimit -n

这些工具能让你深入了解系统行为,用于调试生产问题。