linux有诸多优秀的工具帮助我们分析服务器各项性能指标和协助开发调试工作。下面只列举比较基础的命令,且一般是集成在linux环境中而不需再次安装的命令。更多更详细的命令可以参考 https://github.com/brendangregg/perf-tools
A
、CPU进程相关
常用工具列举下:uptime、ps、top、mpstat、pidstat等
uptime: 查看系统运行时间,平均负载等。
Load
>
#
of
CPUs
may
mean
CPU
saturation
ps:可查看某个进程占用CPU资源百分比;
top/htop/atop:显示的信息同ps接近,但是top可以了解到CPU消耗,可以根据用户指定的时间来更新显示;
mpstat: 可以查看所有CPU的平均信息,还能查看指定CPU的信息;
pidstat: 对于显示某个进程的状态,耗费时间等非常有用。
B、内存相关
常用工具:free、vmstat
free:可查看内存的总数、已使用、空闲内存数,swap使用(当系统没有足够物理内存来应付所有请求的时候就会用到swap设备,swap设备可以是一个文件,也可以是一个磁盘分区。不过要小心的是,使用swap的代价非常大。如果系统没有物理内存可用,就会频繁swapping,如果swap设备和程序正要访问的数据在同一个文件系统上,那会碰到严重的IO问题,最终导致整个系统迟缓,甚至崩溃)情况等,特别提醒,如果swap使用较多,说明服务器内存不怎么够用了;
vmstat:可监控虚拟内存使用情况、空闲内存、缓冲、cache等指标,和free工具类似。
C、磁盘I/O相关
常用工具:iostat、fio、swapon
iostat:可获取每秒读写的数据块数、所有读写块数等,可对磁盘读写性能有个大体了解,并可以模拟顺序以及随机读写磁盘操作;
fio:另一款强大的io压力测试工具,这个工具最大的特点是使用简单,支持的文件操作非常多, 可以覆盖到我们能见到的文件使用方式。
swapon: 显示swap设备的使用情况,如果你启动了swap设备的话。
D、网络I/O相关
常用工具:netstat、tcpdump、route、iptarf、netperf、nicstat、ping/traceroute
netstat:是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息;
tcpdump:用于监视TCP/IP连接并直接读取数据链路层的数据包头。可以指定哪些数据包被监视、哪些控制要显示格式;
-w xx.pcap 写入到文件,可以使用 wireshark 打开再用 wireshark 语法过滤下。收包发包都在本机的话记得 -i lo
route:可以为ifconfig命令配置的网卡设置静态路由,在本地 IP 路由表中显示和修改条目网络命令;
iptarf:可用于查看本机网络的吞吐量,获得网络传输速率;
netperf:可以模拟服务器和客户端网络收发,测试网络吞吐量大小;
iperf:类似于netperf,模拟服务器和客户端网络收发,测试最大TCP和UDP带宽性能,能够提供网络吞吐率信息, 以及震动、丢包率、最大段和最大传输单元大小等统计。
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 which
runs 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 各种信息
注意 wget, curl 等 网络请求命令,如果将 link 用引号括起来,如 wget 'http://baidu.com' -O tmp.down 此时如果 link 里面有反斜
杠 '\',则会出现莫名其妙的错误。
参考:
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/
http://ufsdump.org/papers/oscon2009-linux-monitoring.pdf