[关闭]
@Chiang 2020-01-09T13:15:16.000000Z 字数 2835 阅读 610

调试工具

Linux


strace

  • strace is a diagnostic, debugging and instructional userspace utility for Linux. It is used to monitor and tamper with interactions between processes and the Linux kernel, which include system calls, signal deliveries, and changes of process state.
  • strace 是Linux的诊断,调试和说明性用户空间实用程序。它用于监视和篡改进程与Linux内核之间的交互,包括系统调用,信号传递和进程状态更改。

strace有两种运行模式

  1. 一种是通过它启动要跟踪的进程。用法很简单,在原本的命令前加上strace即可。比如我们要跟踪 "ls -lh /var/log/messages" 这个命令的执行,可以这样:
  2. strace ls -lh /var/log/messages
  3. 另外一种运行模式,是跟踪已经在运行的进程,在不中断进程执行的情况下,理解它在干嘛。 这种情况,给strace传递个-p pid 选项即可。
  4. 比如,有个在运行的some_server服务,第一步,查看pid:
  5. pidof some_server
  6. 17553
  7. 得到其pid 17553然后就可以用strace跟踪其执行:
  8. strace -p 17553
  9. 完成跟踪时,按ctrl + C 结束strace即可。

strace常用选项:

  1. strace -tt -T -v -f -e trace=file -o /data/log/strace.log -s 1024 -p 23489


  • -o 输出到文件
  • -tt 显示毫秒级别时间
  • -p 指定跟踪进程pid
  • -s 当系统调用的某个参数是字符串时,最多输出指定长度的内容,默认是32个字节
  • -f 跟踪目标进程,以及目标集成创建的所有子进程
  • -v 对于某些相关调用,把完整的环境变量,文件stat结构打印出来
  • -T 显示每次系统调用所花费时间
  • -e 这个用的应该比较多,虽然我还不会用 功能为 控制要跟踪的事件和跟踪行为,比如指定要跟踪的系统调用名称

    • -e trace=file 跟踪和文件访问相关的调用,即参数中有文件名
    • -e trace=process 和进程管理相关的调用,比如fork/exec/exit_group
    • -e trace=ipc 进程间通信相关 ,比如shmget
    • -e trace=desc 和文件描述符相关,比如write/read/select/epoll
    • -e trace=network 和网络通信相关调用,比如socket/sendto/connect

pidof

找出某个正在执行的进程的PID

  1. pidof [-sx] program_name
  • -s 仅列出一个PID而不列出所有的PID
  • -x 同时列出该program name 可能的PPID那个进程的PID
  1. pidof systemd rsyslogd

lsof

列出被进程所使用的文件名称
这个命令可以找出您想要知道的某个进程是否正在使用某些文件.

  1. lsof [-aUu] [+d]
  • -a 多项数据需要同时成立才显示出来
  • -U 仅列出UNIX-like系统的socket文件类型
  • -u 后面接username,列出该使用者相关进程所使用的文件.
  • +d 后面接目录,亦即找出摸个目录下面已经被使用的文件.
  1. 范例一: 列出目前系统商贸所有已经被开启的文件设备
  2. lsof
  3. 范例二: 仅列出关于root的所有进程所使用的socket文件.
  4. lsof -u root -a -U
  5. -a 的用途是使两个参数同时成立
  6. 范例三: 列出目前系统上面所有的被使用的外接设备
  7. lsof +d /dev
  8. 范例四: 显示属于rootbash这个程序所开启的文件
  9. lsof -u root | grep bash

netstat

追踪网络或socket文件

  1. netstat -[atunlp]
  • -a 将目前系统上所有的连接,监听,socket信息都列出来
  • -t 列出tcp网络封包的信息
  • -u 列出udp网络封包的信息
  • -n 不以进程的服务名称,以端口号(port number)来显示
  • -l 列出目前正在网络监听的(listen)的服务
  • -p 列出该网络服务的进程PID

vmstat

检测系统资源变化

ps

将某个时间点的进程运行情况截取下来

  1. ps aux //查看系统所有的进程
  2. ps -lA //查看系统所有的进程
  3. ps axjf //连同部分进程树状态
  • -A 所有的进程均显示出来,与-e具有同样的效果
  • -a 不显示与终端有关的所有进程

top

pstree

tcpdump

  • tcpdump是一个用于截取网络分组,并输出分组内容的工具。凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具
  • tcpdump 支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息

gdb

GDB是GNU Project调试器,它使您可以查看另一个程序在执行过程中正在执行的操作–或该程序崩溃时正在执行的操作。

GDB可以做四种主要的事情(以及支持这些事情的其他事情)来帮助您捕获行为中的错误:

  • 启动您的程序,并指定可能影响其行为的所有内容。
  • 使程序在指定条件下停止。
  • 当程序停止时,检查发生了什么。
  • 更改程序中的内容,以便您可以尝试纠正一个错误的影响,然后继续学习另一个错误。

这些程序可能与GDB(本机)在同一台计算机上执行,在另一台计算机(远程)上或在模拟器上执行。GDB可以在大多数流行的UNIX和Microsoft Windows变体以及Mac OS X上运行。

perf

Perf 是内置于Linux 内核源码树中的性能剖析(profiling)工具。它基于事件采样原理,以性能事件为基础,支持针对处理器相关性能指标与操作系统相关性能指标的性能剖析。可用于性能瓶颈的查找与热点代码的定位。linux2.6及后续版本都自带该工具,几乎能够处理所有与性能相关的事件。

telnet

Telnet协议是TCP/IP协议家族中的一员,是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个telnet会话,必须输入用户名和密码来登录服务器。Telnet是常用的远程控制Web服务器的方法。

curl

wget

ab

压测工具

wrk

压测工具

sar

ss


参考资料:
strace的简单用法-ubuntu下演示
强大的strace命令用法详解
使用lsof命令查找在Linux中侦听指定端口的进程
tcpdump
专题:性能调优之工具---perf

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注