首页 > 代码库 > linux环境常用的性能监控和协助开发调试工具(附tcpdump常见使用方式)

linux环境常用的性能监控和协助开发调试工具(附tcpdump常见使用方式)

linux有诸多优秀的工具帮助我们分析服务器各项性能指标和协助开发调试工作。下面只列举比较基础的命令,且一般是集成在linux环境中而不需再次安装的命令。更多更详细的命令可以参考 https://github.com/brendangregg/perf-tools

 ACPU进程相关 常用工具列举下:uptime、pstopmpstat、pidstat 
uptime: 查看系统运行时间,平均负载等。Load of CPUs may mean CPU saturation
ps:可查看某个进程占用CPU资源百分比; 
top/htop/atop:显示的信息同ps接近,但是top可以了解到CPU消耗,可以根据用户指定的时间来更新显示; 
mpstat: 可以查看所有CPU的平均信息,还能查看指定CPU的信息;
pidstat: 对于显示某个进程的状态,耗费时间等非常有用。


B、内存相关 常用工具:freevmstat 
free:可查看内存的总数、已使用、空闲内存数,swap使用(当系统没有足够物理内存来应付所有请求的时候就会用到 swap 设备,swap 设备可以是一个文件,也可以是一个磁盘分区。不过要小心的是,使用 swap 的代价非常大。如果系统没有物理内存可用,就会频繁 swapping,如果 swap 设备和程序正要访问的数据在同一个文件系统上,那会碰到严重的 IO 问题,最终导致整个系统迟缓,甚至崩溃)情况等,特别提醒,如果swap使用较多,说明服务器内存不怎么够用了; 
vmstat:可监控虚拟内存使用情况、空闲内存、缓冲、cache等指标,和free工具类似。

 C、磁盘I/O相关 常用工具:iostatfio、swapon
iostat:可获取每秒读写的数据块数、所有读写块数等,可对磁盘读写性能有个大体了解,并可以模拟顺序以及随机读写磁盘操作;
fio:另一款强大的io压力测试工具,这个工具最大的特点是使用简单,支持的文件操作非常多可以覆盖到我们能见到的文件使用方式。
swapon: 显示swap设备的使用情况,如果你启动了swap设备的话。


 D、网络I/O相关 常用工具:netstattcpdumprouteiptarfnetperf、nicstat、ping/traceroute
netstat:是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息; 
tcpdump:用于监视TCP/IP连接并直接读取数据链路层的数据包头。您可以指定哪些数据包被监视、哪些控制要显示格式; 
route:可以为ifconfig命令配置的网卡设置静态路由,在本地 IP 路由表中显示和修改条目网络命令; 
iptarf:可用于查看本机网络的吞吐量,获得网络传输速率; 
netperf:可以模拟服务器和客户端网络收发,测试网络吞吐量大小;
iperf:类似于netperf,模拟服务器和客户端网络收发,测试最大TCPUDP带宽性能,能够提供网络吞吐率信息以及震动、丢包率、最大段和最大传输单元大小等统计。
nicstat: 监控网络接口的状态如吞吐量等,类似iostat的输出格式。
ping/traceroute:比较常见,查看网络是否畅通。

E、开发测试相关 常用工具:readelf、hexdump/xxd、od、objdump、nm、telnet/nc

readelf:以可读方式展示elf文件格式,包括(目标文件/可执行文件/共享库)

hexdump/xxd:将文件内容以16进制打印

od:可选进制打印文件内容

objdump:将机器指令反汇编

nm:列出目标文件的symbols

telnet/nc :测试网络连接客户端


F、跟踪调试相关 常用工具:strace、ltrace、dtrace/ftrace、blktrace
strace: 跟踪运行进程的系统调用耗费时间、出错信息、参数传递等。
ltrace:跟踪运行进程的函数库调用耗费时间、出错信息、参数传递等。
dtrace/ftrace:上述两个工具的综合。dtrace is a tracing tool whichruns at the system level - this means you can trace all processes, into and out of the kernel, rather than selecting a single process to trace.
blktrace:Block I/O event tracer


G、大而全的综合工具sar/collectl、dstat、查看/proc/pid/xxx 各种信息、sysctl、/sys 各种信息



附录:tcpdump 常见使用方式


使用root用户:

tcpdump tcp port 端口号 -X -s 0 -i eth1
tcpdump host 机器ip -X -s 0 -i eth1

tcpdump host 机器ip and tcp port 端口号 -X -s 0 -i eth1 

使用说明:

监视指定网络接口的数据包

tcpdump -i eth1

如果不指定网卡,默认tcpdump只会监视第一个网络接口,一般是eth0,下面的例子都没有指定网络接口。 

监视指定主机的数据包

打印所有进入或离开sundown的数据包.

tcpdump host sundown

也可以指定ip,例如截获所有210.27.48.1 的主机收到的和发出的所有的数据包

tcpdump host 210.27.48.1

打印helios 与 hot 或者与 ace 之间通信的数据包

tcpdump host helios and \( hot or ace \)

截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信

tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)

打印ace与任何其他主机之间通信的IP 数据包, 但不包括与helios之间的数据包.

tcpdump ip host ace and not helios

如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:

tcpdump ip host 210.27.48.1 and ! 210.27.48.2

截获主机hostname发送的所有数据

tcpdump -i eth0 src host hostname

监视所有送到主机hostname的数据包

tcpdump -i eth0 dst host hostname


参考:
https://github.com/brendangregg/perf-tools
http://crtags.blogspot.com/2012/04/dtrace-ftrace-ltrace-strace-so-many-to.html
https://danielmiessler.com/study/tcpdump/


linux环境常用的性能监控和协助开发调试工具(附tcpdump常见使用方式)