五、Linux系统常用调试工具

4.2、ps(查看进程状态)

  • 用途:显示系统中运行的进程及其相关信息,如 PID(进程 ID)、CPU 使用率、内存占用等。

  • 常见用法:

    ps aux       # 显示所有进程,包含用户、PID、CPU/内存使用情况等
    ps -ef       # 以完整格式显示所有进程,并包含父子进程信息
    ps -e --forest  # 以树状结构显示进程关系
    ps aux | grep nginx
    
  • 示例输出:

    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root         1  0.0  0.1  16516  2824 ?        Ss   10:00   0:01 /sbin/init
    root      1024  0.1  0.2  54392  5024 ?        Ss   10:05   0:02 sshd: root@pts/0
    

4.3、kill(终止进程)

  • 用途:结束指定的进程。

  • 使用:

    sh复制编辑kill -9 1234  # 强制杀死进程 1234
    kill -15 1234 # 优雅地终止进程
    killall firefox # 结束所有名为 firefox 的进程
    

4.4、lsof(列出打开的文件)

  • 用途:显示当前系统中打开的文件(包括进程打开的文件、网络端口等)。

  • 使用:

    lsof -p 1234    # 查看进程 1234 打开的文件
    lsof -i :80     # 查看占用 80 端口的进程
    lsof /var/log/syslog  # 查看哪个进程在使用某个文件
    

4.5、df(查看磁盘使用情况)

  • 用途:检查磁盘空间占用情况。

  • 使用:

    df -h
    
  • 示例输出:

    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sda1       50G   10G   40G  20% /
    

4.6、du(查看目录大小)

  • 用途:查看目录和文件的大小。

  • 使用:

    du -sh /var/log
    

4.7、netstat(查看网络连接)

  • 用途:显示网络端口、连接状态。

  • 使用:

    netstat -tulnp  # 显示监听的 TCP/UDP 端口
    

4.8、ss(查看套接字状态,替代 netstat

  • 用途:显示 TCP/UDP 连接信息,比 netstat 更高效。

  • 使用:

    ss -tulnp
    

4.9、traceroute(跟踪数据包路径)

  • 用途:查看数据包经过的路由。

  • 安装:

    sudo apt install traceroute
    
  • 使用:

    traceroute google.com
    

4.10、free(查看内存使用)

  • 用途:显示系统内存占用情况。

  • 使用:

    free -h
    
  • 示例输出:

                total        used        free
    Mem:        8.0G         3.2G        4.8G
    

4.11、vmstat(查看系统资源使用情况)

  • 用途:分析 CPU、内存、I/O 使用情况。

  • 使用:

    vmstat 1 5
    

4.12、uname(查看系统信息)

  • 用途:查看 Linux 内核版本、架构。

  • 使用:

    uname -a
    

4.13、dmesg(查看内核日志)

  • 用途:查看系统启动日志、硬件信息。

  • 使用:

    dmesg | tail -20
    

4.14、uptime(查看系统运行时间)

  • 用途:显示系统运行时长和负载情况。

  • 使用:

    uptime
    

4.15、ltrace(库调用跟踪)

  • 用途:跟踪进程的库函数调用(strace 跟踪的是系统调用)。

  • 安装:

    sudo apt install ltrace
    
  • 使用:

    ltrace ./my_program
    
  • 示例:

    ltrace ls
    

    输出:

    __libc_start_main(0x561bc8, 1, 0x7ffc, 0x561bc8, 0, 0, 0) = 0
    opendir(".") = 0x561bc8
    readdir(0x561bc8) = 0x561bc8
    closedir(0x561bc8) = 0
    

    区别:

    • strace 追踪系统调用,例如 openat()
    • ltrace 追踪库函数调用,例如 opendir()

4.16、perf(系统性能分析)

  • 用途:分析 CPU 事件、函数调用频率、进程性能。

  • 安装:

    sudo apt install linux-tools-common linux-tools-generic
    
  • 使用:

    perf record -g ./my_program
    perf report
    

    输出:

    30%  my_program  [.] main
    20%  my_program  [.] process_data
    

    说明:

    • 30% 的 CPU 时间在 main 函数中
    • 20% 的 CPU 时间在 process_data 函数中

4.17、iostat(I/O 性能分析)

  • 用途:分析磁盘 I/O 读写性能。

  • 安装:

    sudo apt install sysstat
    
  • 使用:

    iostat -x 1
    

    关键指标:

    • r/s(读取请求数)
    • w/s(写入请求数)
    • %util(磁盘利用率)

4.18、valgrind(内存泄漏检测)

  • 用途:检测 C/C++ 程序中的内存泄漏、野指针、未初始化变量等问题。

  • 安装:

    sudo apt install valgrind
    
  • 使用:

    valgrind --leak-check=full ./my_program
    
  • 示例输出:

    ==1234== 10 bytes in 1 blocks are definitely lost in loss record 1 of 1
    ==1234==    at 0x4C2EAF6: malloc (vg_replace_malloc.c:299)
    ==1234==    by 0x400611: main (test.c:6)
    

    说明:

    • malloc() 申请的 10 字节没有释放,可能有内存泄漏

4.19、ping(测试网络连通性)

  • 用途:测试目标主机是否可达。

  • 使用:

    ping 8.8.8.8
    
posted @ 2025-05-27 10:04  暮云星影  阅读(337)  评论(0)    收藏  举报