Debug
查看进程
|
|
杀死进程
|
|
查看网络端口
netstat 是一款命令行工具,可用于列出系统上所有的网络套接字连接情况,包括 tcp, udp 以及 unix 套接字,另外它还能列出处于监听状态(即等待接入请求)的套接字,参考这篇文章。
|
|
查看打开文件
lsof(list open files)是一个列出当前系统打开文件的工具。在 linux 环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。
|
|
查看磁盘占用
top
top 命令是 Linux 下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况。
|
|
关于 top 的显示的具体意义,可以参考 To be done
atop
atop 是一个功能非常强大的 linux 服务器监控工具,它的数据采集主要包括:CPU、内存、磁盘、网络、进程等,并且内容非常的详细,特别是当那一部分存在压力它会以特殊的颜色进行展示,如果颜色是红色那么说明已经非常严重了。
注意:所有的信息都是反映过去 10S 的状态信息
使用
atop 工具安装好后在运行命令 atop 就能弹出监控界面
接下来我们就来详细看看每行参数意义。
atop: 该行列出了服务器的 host、当前时间、信息收集的频率
PRC: 该列展示整个系统的性能状况;
- sys: 过去 10s 所有的进程在内核态运行的时间总和
- usr: 过去 10s 所有的进程在用户态的运行时间总和
- #proc: 进程总数
- #trun: 过去 10s 转换的进程数
- #zombie:过去 10s 僵死进程的数量
- #exit:在 10s 采样周期期间退出的进程数量
CPU: cpu 列展示了服务器的 CPU 整体的一个状态信息,包括内核和用户所占的比例、处理中断所占的比例、CPU 的处于空闲下比例(这里是 100%*cpu 核心数,CPU 有时候也会因为由于磁盘性能问题出现等待的空闲)
- sys: cpu 在处理进程时处于内核态的时间所占的比例
- usr: cpu 在处理进程时处于用户态的时间所占的比例
- irq: cpu 在处理进程的中断请求所占的实际比例
- idle: cpu 处于空闲状态下的时间比例(除了本身空闲,还有比如等待磁盘 io 的情况下也会处于空闲状态)
cpu: 每个核心的状态信息,和总的 CPU 信息一样,每列加起来的总和就是总的 CPU 的状态信息。
CPL: cpl 也反应了服务器整体的性能,展示信息包括进程等待队列数,分别从过去 1 分钟、5 分钟、15 分钟的采样信息。
- avg1: 过去 1 分钟进程等待队列数
- avg5: 过去 5 分钟进程等待队列数
- avg15: 过去 15 分钟进程等待队列数
- csw(context swapping):上下文交换次数
- intr(interrupt): 中断发生的次数
- numcpu: cpu 的核心数
mem: 该列主要展示内存的使用信息。
- tot:物理内存总量
- free:空闲内存的大小(不能单单从这个字段就判断内存不足,还需要参考 free -m 中的-/+ buffers/cache:free 因为这块的内容随时就可以拿过来使用,还可以从是否有使用 Swap 来判断是否内存不足)
- cache:用于页缓存的内存大小
- dirty:内存中的脏页大小
- buff:用于文件缓存的内存大小
- slab:系统内核占用的内存大小
SWP:交换空间使用情况
- tot: 交换空间总量
- free: 交换空间剩余空间总量
PAG 列:虚拟内存分页情况
- swin: 换入内存页数
- swout:换出内存页数
LVM/DSK: 每个分区信息以一列来进行展示
- busy:磁盘忙时所占比例
- read、KiB/r 、MBr/s:每秒读的请求数和请求的 kb、mb 数
- write、KiB/w 、MBr/w:每秒写的请求数和请求的 kb、mb 数
- avq:磁盘平均队列长度(根据实际的监控该列好像是磁盘平均请求数 avgrq)
- avio:磁盘的平均 io 时间
NET: 展示了传输层(TCP/UDP)、网络层(ip)、网络接口的网络传输信息。
**transport:**传输层(TCP/UDP)的数据输入输出的展示,例如在服务器的内部进程之间的数据传输就是在传输层展示,以为还不需要往下通过网络进行传输。
**network:**网络层(ip)的数据输入输出的展示;
**eth0:**默认的网络接口的数据输入输出的展示,也就是通过 etho 的 ip 的数据传输的展示,
- sp: 网卡的带宽(1000M)
- pcki:传入的数据包的大小
- pcko:传出的数据包的大小
- si:每秒传入的数据大小
- so:每秒传出的数据大小
- coll(collisions):每秒的冲突数
- mlti(MULTICAST):每秒的多路广播的数量
- erri/erro: 每秒输入输出的错误数
- drpi/drpo: 每秒的输入输出的丢包数
**lo:**通过 127.0.0.1 网络接口的数据传输的数据展示,参数和上面的 eth0 是一样的
进程列
进程列展示了每个进程在过去 10S 内的数据
m 模式:内存状态模式
SYSCPU:过去 10s 内进程处于内核模式占用的 CPU 时间
USRCPU:过去 10S 进程处于用户模式占用的 CPU 时间
VSIZE:过去 10S 进程占用的虚拟空间大小
RSIZE:过去 10S 进程占用的内存空间大小
PSIZE:过去 10S 进程占用的页大小
VGROW:过去 10S 进程增长的虚拟空间大小
RGROW:过去 10S 进程增长的内存大小
SWAPSZ:过去 10S 进程使用交换空间的大小。
MEM:过去 10S 进程占用内存百分比
d 模式:磁盘状态模式
RDDSK:过去 10S 进程读磁盘的数据量
WRDSK:过去 10S 进程写磁盘的数据量
DSK:过去 10S 进程所占磁盘的百分比
CMD:进程名
**p 模式:**进程状态模式,同一个名称的进程显示一列,根据进程名进行分组显示
NPROCS:相同名称的进程数量
其它的参数上面已经有列出
v 模式:线程状态模式
u 模式:用户模式
根据用户进行分组显示
g 模式:标准模式
s:进程当前的状态,包括:s(sleeping), R(runing)等
atop 的相关文件
/etc/atop:目录保存的是 atop 的配置文件 /etc/rc.d/init.d/atop:atop 的启动文件 /etc/cron.d/atop:atop 的定时任务文件,默认是每天 0 点开始 /var/log/atop:atop 日志文件,默认是每天 0 点开始会产生当天的一个日志文件,然后可以通过 atop -r file 查看信息,但是没有找到自动播放的的功能,只能通过输入 b 显示一个指定的时间的信息,可以写个循环来实现 /usr/bin/atop:atop 命令目录
atop -r atop_20160510 -b 13:00 -e 17:00
atop 产生的日志文件信息是 10 分钟一个采样周期进行记录,可以通过修改/etc/atop/atop.daily 文件进行修改。
atop 的其它参数:
Usage: atop [-flags] [interval [samples]]
or
Usage: atop -w file [-S] [-a] [interval [samples]]
atop -r [file] [-b hh:mm] [-e hh:mm] [-flags]
generic flags:
-a show or log all processes (i.s.o. active processes only)
-R calculate proportional set size (PSS) per process
-P generate parseable output for specified label(s)
-L alternate line length (default 80) in case of non-screen output
-f show fixed number of lines with system statistics
-F suppress sorting of system resources
-G suppress exited processes in output
-l show limited number of lines for certain resources
-y show individual threads
-1 show average-per-second i.s.o. total values
-x no colors in case of high occupation
-g show general process-info (default)
-m show memory-related process-info
-d show disk-related process-info
-n show network-related process-info
-s show scheduling-related process-info
-v show various process-info (ppid, user/group, date/time)
-c show command line per process
-o show own defined process-info
-u show cumulated process-info per user
-p show cumulated process-info per program (i.e. same name)
-C sort processes in order of cpu-consumption (default)
-M sort processes in order of memory-consumption
-D sort processes in order of disk-activity
-N sort processes in order of network-activity
-A sort processes in order of most active resource (auto mode)
specific flags for raw logfiles:
-w write raw data to file (compressed)
-r read raw data from file (compressed)
special file: y[y...] for yesterday (repeated)
-S finish atop automatically before midnight (i.s.o. #samples)
-b begin showing data from specified time
-e finish showing data after specified time
strace
strace 常用来跟踪进程执行时的系统调用和所接收的信号。 在 Linux 世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通过系统调用访问硬件设备。strace 可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。
输出参数含义
每一行都是一条系统调用,等号左边是系统调用的函数名及其参数,右边是该调用的返回值。 strace 显示这些调用的参数并返回符号形式的值。strace 从内核接收信息,而且不需要以任何特殊的方式来构建内核。
|
|
参数
|
|
命令实例
跟踪可执行程序
|
|
-f -F 选项告诉 strace 同时跟踪 fork 和 vfork 出来的进程,-o 选项把所有 strace 输出写到~/straceout.txt 里 面,myserver 是要启动和调试的程序。
跟踪服务程序
|
|
跟踪 28979 进程的所有系统调用(— title: date: 2023-02-10 22:40:50 type: garden author: houmin tags: [] —-e trace=all),并统计系统调用的花费时间,以及开始时间(并以可视化的时分秒格式显示),最后将记录结果存在 output.txt 文件里面。
ptrack
pstack 是 Linux 系统下的一个命令行工具,此命令可以显示指定进程每个线程的堆栈快照,便于排查程序异常和性能评估
pstack 是基于 gdb 实现的,通过 man pstack 可以发现,它其实是 gstack 的一个软链接
pstack 可显示每个进程的栈跟踪。pstack 命令必须由相应进程的属主或 root 运行。可以使用 pstack 来确定进程挂起的位置。此命令允许使用的唯一选项是要检查的进程的 PID。请参见 proc(1) 手册页。
这个命令在排查进程问题时非常有用,比如我们发现一个服务一直处于 work 状态(如假死状态,好似死循环),使用这个命令就能轻松定位问题所在;可以在一段时间内,多执行几次 pstack,若发现代码栈总是停在同一个位置,那个位置就需要重点关注,很可能就是出问题的地方;
示例:查看 bash 程序进程栈:
|
|
vmstat
vmstat 是 Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU 活动进行监控。
|
|
各个参数意义如下:
- r 运行队列中进程的数量
- b 等待 IO 的进程数量
- swpd 使用虚拟内存大小
- free 空闲的物理内存的大小
- buff 用作缓冲的内存大小,指的是块设备 IO 时候在内存中的缓冲,一般来说不太重要
- cache 用作缓存的内存大小,指的是文件读写时候的 page cache,比较重要
- si 每秒从交换区写到内存的大小
- so 每秒写入交换区的内存大小
- bi 每秒从块设备读取的块数量,默认块大小是 1024byte,我本机上没什么 IO 操作,所以一直是 0,但是我曾在处理拷贝大量数据(2-3T)的机器上看过可以达到 140000/s,磁盘写入速度差不多 140M 每秒
- bo 每秒写入到块设备的块数量
- in 每秒 CPU 的中断次数,包括时间中断
- cs 每秒上下文切换次数
- us 用户 CPU 时间,包括 nice 时间
- sy 系统 CPU 时间
- id 空闲 CPU 时间,一般来说,id + us + sy = 100,一般我认为 id 是空闲 CPU 使用率,us 是用户 CPU 使用率,sy 是系统 CPU 使用率。
- wa 等待 IO CPU 时间
- st 虚拟机中运行的时间 stolen
iostat
iostat是 I/O statistics(输入/输出统计)的缩写,iostat 工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出 CPU 使用情况。iostat 属于 sysstat 软件包。可以用yum install sysstat 直接安装。
|
|
各个参数意义如下
%user:CPU 处在用户模式下的时间百分比%nice:CPU 处在带 NICE 值的用户模式下的时间百分比%system:CPU 处在系统模式下的时间百分比- %iowait
:CPU等待输入输出完成时间的百分比 - %steal
:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比 - %idle
:CPU空闲时间百分比
当然了,iostat命令的重点不是用来看 CPU 的,重点是用来监测磁盘性能的。
Device:设备名称rrqm/s:每秒合并到设备的读取请求数wrqm/s:每秒合并到设备的写请求数r/s:每秒向磁盘发起的读操作数w/s:每秒向磁盘发起的写操作数rkB/s:每秒读 K 字节数wkB/s:每秒写 K 字节数avgrq-sz:平均每次设备 I/O 操作的数据大小avgqu-sz:平均 I/O 队列长度await:平均每次设备 I/O 操作的等待时间 (毫秒),一般地,系统 I/O 响应时间应该低于 5ms,如果大于 10ms 就比较大了r_await:每个读操作平均所需的时间;不仅包括硬盘设备读操作的时间,还包括了在 kernel 队列中等待的时间w_await:每个写操作平均所需的时间;不仅包括硬盘设备写操作的时间,还包括了在 kernel 队列中等待的时间svctm:平均每次设备 I/O 操作的服务时间 (毫秒)(这个数据不可信!)%util:一秒中有百分之多少的时间用于 I/O 操作,即被 IO 消耗的 CPU 百分比,一般地,如果该参数是 100%表示设备已经接近满负荷运行了
关于数据总结:
- 如果
%util接近 100%,说明产生的 I/O 请求太多,I/O 系统已经满负荷,该磁盘可能存在瓶颈
查看程序依赖库 ldd
|
|
原理: ldd 不是个可执行程式,而只是个 shell 脚本; ldd 显示可执行模块的 dependency 的工作原理,其实质是通过 ld-linux.so(elf 动态库的装载器)来实现的。ld-linux.so 模块会先于 executable 模块程式工作,并获得控制权,因此当上述的那些环境变量被设置时,ld-linux.so 选择了显示可执行模块的 dependency。
关于 ld-linux.so,可以参见我的另一篇文章
-
No backlinks found.