当前位置:金沙js333娱乐场 > 网络频道 > 金沙js333娱乐场Linux下常用系统分析工具总结

金沙js333娱乐场Linux下常用系统分析工具总结

文章作者:网络频道 上传时间:2019-10-22

一.测试工具
1.ps -u
  获取当前运行程序的Pid、cpu、内存占用情况
 
2.top/htop/free
  这三条指令相结合,可以查看程序的内存,cpu使用情况
  其中查看内存,以free为主,另外两个为辅
 
3.lsof |grep "程序名"|wc -l
  查看程序创建的fd。进而判断程序的socket连接句柄数
 
4.lsof |grep "程序名" > 程序名.log
  将指定程序的资源使用状态输出到文件中,可以查看其资源具体使用状态;如当前Listen的端口、建立连接的socket
 
5.pmap pid > 程序名.log
  查看程序当前内存使用状态,如线程个数,及每个线程的栈大小
 
6.valgrind --tool=memcheck --leak-check=yes --log-file=程序名.log 程序可执行命令
  对程序进行内存检查,尤其是内存泄露...
 
7.strace/ltrace -o 程序名.log 程序可执行命令
  用来跟踪程序运行时的栈调用,该命令输出内容比较多,而且一般要结合其他工具(如gdb)工具来使用才有效
 
8.gdb + core文件
  首先执行:ulimit -c unlimited
  执行程序发生段错误时,生成core文件
  gdb 程序可执行命令 core文件;对core文件进行分析,定位段错误
 
9.tcpdump 【-i lo:用于环路】 【-s 0:不限制包大小】 -w tcpdump.log 【tcp port 3002:过滤语句】
  该工具用来根据自己设置的过滤语句,抓取需要的socket通信数据包;
  抓取后的数据可以在windows下通过wireshark或者easySpy工具来分析;
 
二.测试手段
1.测试网络拓补图
  可以根据该文档,搭建测试环境
 
2.测试计划
  使得测试过程可控
金沙js333娱乐场, 
3.测试用例
  预先对测试内容进行规划,可以在测试过程中进行补充、完善
 
4.QA文档
  将测试过程中遇到的问题,想法,建议,bugs都记录在该文档中;
  尤其是在团队合作中,该文档可以加强团队成员的合作
 
5.BugTicket(缺陷分析文档)
  将测试过程中的bugs,及发现过程、分析过程、解决过程都记录下来,可以起到积累测试经验的作用
 
6.仿真工具
  可以根据测试需求,编写仿真软件来模拟测试环境
  如:编写软件来根据配置生成sql语句,可以通过SQL工具来加快配置管理的过程
     编写软件来根据配置生成HTTP接口调用,可以通过文件+httpd的方式来模拟Access服务器的接口调用         金沙js333娱乐场 1

CPU
主要介绍top,strace,perf,vmstat。

1.1 top
top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。
Top常用的可选参数和其对应的含义如下:
(1)-c:显示完整的命令;
(2)-d:屏幕刷新间隔时间;
(3)-i<时间>:设置间隔时间;
(4)-u<用户名>:指定用户名;
(5)-p<进程号>:指定进程;
(6)-n<次数>:循环显示的次数。
top执行起来的效果如下:

金沙js333娱乐场 2

Paste_Image.png

前五行是系统整体的统计信息。第一行是任务队列信息,第二行和第三行为进程和CPU的信息,最后两行为内存信息。下面对一些比较重要的参数进行说明。
Load average:0.60,0.94,1.04。load average表示系统在过去1分钟5分钟15分钟的任务队列的平均长度。这个值越大就表示系统CPU越繁忙。
Cpu(s):5.0%us(用户空间占用的cpu百分百),3.9%sy(系统空间占用的cpu百分比),0.0%ni(用户进程空间内改变过优先级的用户占用的cpu百分比),90.9%id(空闲cpu的百分比),0.2%wa(等待输入输出cpu的百分比)。
Mem:817280k buffers(用作内核缓存的内存量)。
Swap:磁盘交换区容量。

1.2 strace
strace可以跟踪到一个进程产生的系统调用,包含参数、返回值、执行消耗的时间。
strace的常用的选项以及选项对应的含义如下:
(1)-c 统计每一系统调用的所执行的时间,次数和出错的次数等
(2)-f 跟踪由fork调用所产生的子进程
(3)-t 在输出中的每一行前加上时间信息
(4)-tt 在输出中的每一行前加上时间信息(微妙级)
(5)-T 显示每一调用所耗的时间
(6)-e trace=set 只跟踪指定的系统调用。例如:-e trace=open,close,read,write表示只跟踪这四个系统调用。默认的为set=all
(7)-e trace=file 只跟踪有关文件操作的系统调用
(8)-e trace=process 只跟踪有关进程控制的系统调用
(9)-e trace=network 跟踪与网络有关的所有系统调用
(10)-e strace=signal 跟踪所有与系统信号有关的 系统调用
(11)-e trace=ipc 跟踪所有与进程通讯有关的系统调用
(12)-o filename 将strace的输出写入文件filename -p pid 跟踪指定的进程pid
例如执行 strace cat /dev/null,会得到如下输出:

金沙js333娱乐场 3

Paste_Image.png

每一行都是一条系统调用,等号左边是系统调用的函数名及其参数,右边是该调用的返回值。如果你知道你要找的是什么,你可以让strace只跟踪一些类型的系统调用。例如你需要看看在loadconfigure脚本里面执行的程序里面系统调用ececve的调用情况,则只需要输入这样一条shell命令:strace -f -o loadconfigure-strace.txt -e execve ./loadconfigure
再例如,我们知道ActLogicSvr的进程号是16789,则可以执行strace -p 16789 -c来统计ActLogicSvr在某一段时间系统调用的统计情况。结果如下所示:

金沙js333娱乐场 4

这里很清楚的告诉你调用了那些系统函数,调用次数多少,消耗了多少时间等等这些信息,这个对我们分析一个程序来说是非常有用的。

1.3 Perf
perf是Linux的性能调优工具。perf工具的常用命令包括top,record,report等。
perf top命令用来显示程序运行的整体状况。该命令主要用来观察整个系统当前的状态,比如可以通过查看该命令的输出来查看当前系统最耗时的内核函数或某个用户进程。Perf stat的运行效果如下:

金沙js333娱乐场 5

Paste_Image.png

perf record命令则用来记录指定事件在程序运行过程中的信息,而Perf report命令则用来报告基于前面record命令记录的事件信息生成的程序运行状况报告。我们通常用命令perf record -g -p pid将进程在命令运行期间的各项指令运行所占CPU的比例存在perf.data里面(-g表示记录函数之间的调用关系)。再用perf report --call-graph --stdio将刚刚的统计结果展示出来。
perf record带-g选项时,perf report的运行效果:

金沙js333娱乐场 6

Paste_Image.png

perf record不带-g选项时,perf report的运行效果:

金沙js333娱乐场 7

Paste_Image.png

1.4 vmstat
vmstat是一个很全面的性能分析工具,可以观察到系统的进程状态、内存使用、虚拟内存使用、磁盘的 IO、中断、上下问切换、CPU使用等。
vmstat的输出如下:

金沙js333娱乐场 8

Paste_Image.png

procs:

  • r:运行队列中进程数量,这个值也可以判断是否需要增加CPU。(长期大于1)
  • b:因为io处于阻塞状态的进程数。
    memory:
    -swap:使用虚拟内存大小
    -free:空闲物理内存大小
    -buff:用作缓冲的内存大小
    -cache:用作缓存的内存大小
    swap:
    si:每秒从交换区写到内存的大小,由磁盘调入内存
    so:每秒写入交换区的内存大小,由内存调入磁盘
    io:
  • bi:从块设备读入的数据总量(读磁盘)(KB/s)
  • bo:写入到块设备的数据总量(写磁盘)(KB/s)
    system:
  • in:每秒产生的中断次数
  • cs:每秒产生的上下文切换次数
    cpu:
  • us:用户进程消耗的CPU时间百分比
  • sy:内核进程消耗的CPU时间百分比
  • wa:IO等待消耗的CPU时间百分比
  • id:CPU处在空闲状态时间百分比

网络

2.1 netstat命令
netstat命令用来打印Linux中网络系统的状态信息,可让你得知整个Linux系统的网络情况。
netstat的常用的选项如下:
(1)-a(all)显示所有选项
(2)-t(tcp)仅显示tcp相关选项
(3)-u(udp)仅显示udp相关选项
(4)-l(listen)仅列出有在Listen(监听)的服务状态
(5)-p(program)显示建立相关链接的程序名
(6)-r(route)显示路由信息,路由表
(7)-e(extend)显示扩展信息
(8)-c 每隔一个固定时间,执行该netstat命令。
在这里我们简单复习一下TCP三次握手和四次挥手的过程,便于下面解释netstat中tcp的各种状态。
TCP三次握手的过程如下:
(1)主动连接端发送一个SYN包给被动连接端;
(2)被动连接端收到SYN包后,发送一个带ACK的SYN包给主动连接端。
(3)主动连接端发送一个带ACK标志的包给被动连接端,握手动作完成。
TCP的四次挥手过程如下:
(1)主动关闭端发送一个FIN包给被动关闭端。
(2)被动关闭端收到FIN包后,发送一个ACK包给主动关闭端。
(3)被动关闭端发送了ACK包后,再发送一个FIN包给主动关闭端。
(4)主动关闭端收到FIN包后,发送一个ACK包。当被动关闭端收到ACK后,四次挥手动作完成,连接断开。
下面我们解释一下netstat中tcp连接对应的各种状态。
(1)LISTEN:侦听状态,等待远程机器的连接请求。
(2)SYN_SEND:在TCP三次握手期间,主动连接端发送了SYN包后,进入SYN_SEND状态,等待对方的ACK包。
(3)SYN_RECV:在TCP三次握手期间,主动接收端收到SYN包后,进入SYN_RECV状态。
(4)ESTABLISHED:完成TCP三次握手后,主动连接端进入ESTABLISHED状态。此时,TCP连接已经建立,可以进行通信。
(5)FIN_WAIT_1:在TCP四次挥手时,主动关闭端发送FIN包后,进入FIN_WAIT_1状态。
(6)FIN_WAIT_2:在TCP四次挥手时,主动关闭端收到ACK包后,进入FIN_WAIT_2状态。
(7)TIME_WAIT:在TCP四次挥手时,主动关闭端发送了ACK包之后,进入TIME_WAIT状态,等待最多2MSL时间,让被动关闭端收到ACK包。
(8)CLOSING:在TCP四次挥手期间,主动关闭端发送了FIN包后,没有收到对应的ACK包,却收到了对方的FIN包,此时进入CLOSING状态。
(9)CLOSE_WAIT:在TCP四次挥手期间,被动关闭端收到FIN包后,进入CLOSE_WAIT状态。
(10)LAST_ACK:在TCP四次挥手时,被动关闭端发送FIN包后,进入LAST_ACK状态,等待对方的ACK包。
netstat -te(显示出所有的tcp连接)执行起来的效果如下:

本文由金沙js333娱乐场发布于网络频道,转载请注明出处:金沙js333娱乐场Linux下常用系统分析工具总结

关键词: