- 浏览: 72147 次
-
文章分类
最新评论
Linux系统管理工具-iostat、free、ps、netstat、tcpdump
10.6 监控io性能
iostat命令
>iostat命令被用于监视系统输入输出设备和CPU的使用情况。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。
- iostat -x
[root@adai003 ~]# iostat -x
Linux 3.10.0-514.el7.x86_64 (adai003) 2017年07月11日 _x86_64_ (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.12 0.00 0.24 0.25 0.00 99.39
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.06 0.45 0.30 16.50 4.06 54.39 0.02 31.35 32.52 29.60 6.25 0.47
scd0 0.00 0.00 0.00 0.00 0.00 0.00 8.00 0.00 170.45 170.45 0.00 170.45 0.01
说明: util%:表示io等待占比,正常情况下该值和磁盘读写(r/w)成正比,如果该值很大,读写数值很小则说明磁盘存在问题,系统性能会受影响!
iotop命令
>iotop命令是一个用来监视磁盘I/O使用状况的top类工具(动态)。iotop具有与top相似的UI,其中包括PID、用户、I/O、进程等相关信息。Linux下的IO统计工具如iostat,nmon等大多数是只能统计到per设备的读写情况,如果你想知道每个进程是如何使用IO的就比较麻烦,使用iotop命令可以很方便的查看。
[root@adai003 ~]# iotop
Total DISK READ : 0.00 B/s | Total DISK WRITE : 0.00 B/s
Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 0.00 B/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
3694 be/4 root 0.00 B 0.00 B 0.00 % 0.02 % [kworker/0:0]
1 be/4 root 0.00 B 0.00 B 0.00 % 0.00 % systemd --swit~-deserialize 21
2 be/4 root 0.00 B 0.00 B 0.00 % 0.00 % [kthreadd]
3 be/4 root 0.00 B 0.00 B 0.00 % 0.00 % [ksoftirqd/0]
516 be/4 root 0.00 B 0.00 B 0.00 % 0.00 % crond -n
517 be/4 root 0.00 B 0.00 B 0.00 % 0.00 % login -- root
……
注: 在此关注‘IO>’这一列!
-
iotop常用快捷键
- 左右箭头:改变排序方式,默认是按IO排序
- r:改变排序顺序。
- o:只显示有IO输出的进程。
- p:进程/线程的显示方式的切换。
- a:显示累积使用量。
- q:退出。
10.7 free命令
>free命令可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区。
语法: free [options]
Options:
-b/k/m/g:分别以byte、KB、M、G为单位显示(默认以KB为单位)
-h:已适当的单位显示
-t:显示内存总和
[root@adai003 ~]# free
total used free shared buff/cache available
Mem: 1008392 116072 586356 6864 305964 724644
Swap: 2097148 0 2097148
[root@adai003 ~]# free -h
total used free shared buff/cache available
Mem: 984M 113M 572M 6.7M 298M 707M
Swap: 2.0G 0B 2.0G
说明:
“total=used+free+buff/cache”
“available=free+buff/cache(空闲部分)”
buff(缓冲):当CPU向磁盘写入数据时,由于磁盘存储速率低于CPU,所以CPU工作时先将写好的数据存放在内存中,该部分内存即为缓冲内存。
cache(缓存):当CPU从磁盘读取数据时,由于磁盘输出速率低于CPU的读取速度,所以磁盘的数据会预先存放在内存中,该部分内存即为缓存内存。
10.8 ps命令
>ps命令用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。
用法
语法: ps [options]
Options:
a:显示现行终端机下的所有程序,包括其他用户的程序。
u:以用户为主的格式来显示系统状况。
x:显示所有程序,包括历史进程。
-e:显示所有进程(同a)
-f:显示UID、PPIP、C与STIME栏
-l:显示进程详细信息
- ps aux
[root@adai003 ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 125100 3628 ? Ss 10:28 0:01 /usr/lib/systemd/systemd
root 2 0.0 0.0 0 0 ? S 10:28 0:00 [kthreadd]
……
说明: STAT表示进程状态。
-
进程状态:
- D:不能中断的进程
- R:run状态的进程
- S:sleep状态的进程
- s:主进程
- T:暂停的进程
- Z:僵尸进程
- <:高优先级进程
- N:低优先级进程
- L:内存中被锁定了内存分页
- l:多线程进程
- +:前台进程
-
ps -elf
[root@adai003 ~]# ps -elf
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S root 1 0 0 80 0 - 31275 ep_pol 10:28 ? 00:00:01 /usr/lib/system
1 S root 2 0 0 80 0 - 0 kthrea 10:28 ? 00:00:00 [kthreadd]
进程/线程
进程
>进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。
状态分类
进程执行时的间断性,决定了进程可能具有多种状态。事实上,运行中的进程可能具有以下三种基本状态:
- 就绪状态(Ready):进程已获得除处理器外的所需资源,等待分配处理器资源;只要分配了处理器进程就可执行。就绪进程可以按多个优先级来划分队列。例如,当一个进程由于时间片用完而进入就绪状态时,排入低优先级队列;当进程由I/O操作完成而进入就绪状态时,排入高优先级队列。
- 运行状态(Running):进程占用处理器资源;处于此状态的进程的数目小于等于处理器的数目。在没有其他进程可以执行时(如所有进程都在阻塞状态),通常会自动执行系统的空闲进程。
- 阻塞状态(Blocked):由于进程等待某种条件(如I/O操作或进程同步),在条件满足之前无法继续执行。该事件发生前即使把处理机分配给该进程,也无法运行。
线程
>线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。
在单个程序中同时运行多个线程完成不同的工作,称为多线程。
分类
- 用户级线程:管理过程全部由用户程序完成,操作系统内核心只对进程进行管理。
- 系统级线程(核心级线程):由操作系统内核进行管理。操作系统内核给应用程序提供相应的系统调用和应用程序接口API,以使用户程序可以创建、执行、撤消线程。
进程和线程关系:
10.9 查看网络状态
netstat命令
>netstat命令用来打印Linux中网络系统的状态信息,可让你得知整个Linux系统的网络情况。
语法: netstat [options]
Options:
-a:=all 显示所有连线中的socket
-l:=listening 显示监控中的服务器的socket
-n:=numeric 直接使用IP地址
-p:=programs 显示正在使用socket的程序识别码和程序名称
-t:=tcp 显示tcp传输协议的连接状况
- netstat -lnp 查看监听端口
[root@adai003 ~]# netstat -lnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1839/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1979/master
tcp6 0 0 :::22 :::* LISTEN 1839/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1979/master
udp 0 0 127.0.0.1:323 0.0.0.0:* 488/chronyd
udp6 0 0 ::1:323 :::* 488/chronyd
raw6 0 0 :::58 :::* 7 543/NetworkManager
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node PID/Program name Path
unix 2 [ ACC ] SEQPACKET LISTENING 11807 1/systemd /run/udev/control
unix 2 [ ACC ] STREAM LISTENING 17879 1979/master private/rewrite
:proto为unix的是系统内的socket文件。
……
- netstat -an 查看系统网络连接状况
[root@adai003 ~]# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 52 192.168.8.125:22 192.168.8.1:61445 ESTABLISHED
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 ::1:25 :::* LISTEN
udp 0 0 127.0.0.1:323 0.0.0.0:*
udp6 0 0 ::1:323 :::*
raw6 0 0 :::58 :::* 7
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] SEQPACKET LISTENING 11807 /run/udev/control
unix 2 [ ACC ] STREAM LISTENING 17879 private/rewrite
……
- netstat -lntp 只看tcp协议连接,不看socket
[root@adai003 ~]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1839/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1979/master
tcp6 0 0 :::22 :::* LISTEN 1839/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1979/master
补充: 查看tcp协议状态的命令:
[root@adai003 ~]# netstat -an | awk '/^tcp/ {++sta[$NF]} END {for(key in sta) print key,"\t",sta[key]}'
LISTEN 4
ESTABLISHED 1
ss命令
>ss命令用来显示处于活动状态的套接字信息。ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效,缺点是不会显示进程的名称。
语法: ss [options]
Options:
-a:显示所有套接字(socket)
-n:不解析服务器名称,以数字方式显示
[root@adai003 ~]# ss -an
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
nl UNCONN 0 0 0:0 *
nl UNCONN 0 0 0:-1442840033 *
10.10 Linux下抓包
tcpdump命令
>tcpdump命令是一款sniffer工具,它可以打印所有经过网络接口的数据包的头信息,也可以使用-w选项将数据包保存到文件中,方便以后分析。
语法: tcpdump [options]
Options:
-i:指定网卡名,使用指定的网络送出数据包
-c:指定数量
-w:指定存放位置
-r:=read,从指定文件查看数据包数据
用法
- tcpdump -nn -i ens33 (第一个n表示以数字形式显示IP,如果不加该选项会显示成主机名)
- tcpdump -nn ens33 port 22 (not port 22)指定端口为22的(非22的)
- tcpdump -nn ens33 port 22 and host 192.168.8.1 指定多个条件(host:主机,后面跟主机名或IP)
- tcpdump -nn -i ens33 -c 10 -w /tmp/1.cap 指定抓包数量和存放位置
[root@adai003 ~]# tcpdump -nn -i ens33 -c 10 -w /tmp/1.cap
tcpdump: listening on ens33, link-type EN10MB (Ethernet), capture size 65535 bytes
10 packets captured
12 packets received by filter
0 packets dropped by kernel
查看1.cap文件信息:
[root@adai003 ~]# file /tmp/1.cap
/tmp/1.cap: tcpdump capture file (little-endian) - version 2.4 (Ethernet, capture length 65535)
注: 1.cap内容无法使用cat命令查看,可使用tcpdump -r命令查看
- tcpdump -r 1.cap 查看指定数据包内容
[root@adai003 ~]# tcpdump -r /tmp/1.cap
reading from file /tmp/1.cap, link-type EN10MB (Ethernet)
18:42:15.311230 IP adai003.ssh > 192.168.8.1.61445: Flags [P.], seq 1594109651:1594109799, ack 208567947, win 295, length 148
18:42:15.311978 IP 192.168.8.1.61445 > adai003.ssh: Flags [.], ack 148, win 16316, length 0
18:42:16.296782 IP adai003.ssh > 192.168.8.1.61445: Flags [.], seq 148:3068, ack 1, win 295, length 2920
说明: 包内内容为使用tcpdump打包时的数据。
tshark命令
>该命令也是用于抓包的。
使用前需要安装该工具‘wireshark’:
[root@adai003 ~]# yum install -y wireshark
用法
- 查看指定网卡80端口的1个web服务的访问情况(类似于web的访问日志):
[ 命令:tshark -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.request.uri" ]
[root@adai003 ~]# tshark -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.request.uri"
- 抓取mysql的查询
方法1:
[root@adai003 ~]# tshark -n -i ens33 -R 'mysql.query' -T fields -e "ip.src" -e "mysql.query"
tshark: -R without -2 is deprecated. For single-pass filtering use -Y.
Running as user "root" and group "root". This could be dangerous.
Capturing on 'ens33'
0 packets captured
方法2:
[root@adai003 ~]# tshark -i ens33 port 3307 -d tcp.port==3307,mysql -z "proto,colinfo,mysql.query,mysql.query"
注: 因无相关进程运行所以一无所获!
- 抓取指定类型的MySQL查询
[root@adai003 ~]# tshark -n -i ens33 -R 'mysql matches "SELECT|INSERT|DELETE|UPDATE"' -T fields -e "ip.src" -e "mysql.query"
tshark: -R without -2 is deprecated. For single-pass filtering use -Y.
Running as user "root" and group "root". This could be dangerous.
Capturing on 'ens33'
8 packets dropped
0 packets captured
- 统计http的状态
[root@adai003 ~]# tshark -n -q -z http,stat, -z http,tree
Running as user "root" and group "root". This could be dangerous.
Capturing on 'nflog'
……
注: 这个命令,直到你ctrl + c 才会显示出结果!
- tshark 增加时间标签
[root@adai003 ~]# tshark -t ad
[root@adai003 ~]# tshark -t a
转载于:https://my.oschina.net/1995blog/blog/1593438
相关推荐
### Linux常用性能诊断工具知识点详解 #### 一、性能概述与标准 - **性能基准**:性能基准是指衡量一个高性能系统的参考数据。它为评估系统的实际表现提供了标准。 - **设计阶段解决性能问题**:在设计阶段就考虑...
学习和掌握这些命令及工具,可以帮助Linux管理员实时监控系统状态,及时发现和解决问题,确保系统的稳定性和高性能。同时,持续关注专家如Brendan Gregg的博客,可以获取最新的性能分析技术和最佳实践。
linux 常用查看系统信息分析工具。 如如: iostat iotop perf dstat strace netstat free top tcpdump 等等!
Linux性能监控工具是系统管理员和开发者用来理解和优化系统性能的关键工具。这些工具提供了对系统资源利用率、进程状态、网络活动以及硬件性能的深入洞察。以下是对这些工具的详细解释: 1. **top**:这是一个实时...
作者Steve Best凭借其在IBM丰富的Linux系统优化经验,深入浅出地介绍了开源工具和最佳实践方法,帮助读者构建无错且高效运行的应用程序。 #### 二、目标读者 本书旨在为以下几类人群提供帮助: - **开发者**:希望...
3. **系统监控**:利用`top`、`htop`、`iotop`、`vmstat`、`iostat`、`free`等命令实时监控系统资源使用情况,找出异常进程或资源瓶颈。 4. **性能分析**:`strace`和`lsof`工具能帮助追踪进程调用系统函数的情况,...
1. **性能监控工具**:Linux提供多种命令行工具,如`top`, `htop`, `vmstat`, `iostat`, `mpstat`, 和 `free`,用于实时监控CPU、内存、磁盘I/O和进程状态,帮助识别性能瓶颈。 2. **系统调用分析**:通过`strace`...
- free:它可以帮助管理员了解系统的内存使用状况。 - iostat:此工具显示CPU的平均负载以及硬盘的活动情况。 - sar:搜集并展示系统活动数据,对于长期性能分析尤其有用。 - mpstat:提供多处理器使用情况的数据。 ...
1. **Linux基础命令和工具**:这些是日常系统管理的基础,包括`ls`、`cd`、`mkdir`、`rm`等,以及用于信息查询和系统状态监控的命令,如`free`(查看内存状态)、`ping`(网络连通性测试)、`top`(实时系统资源监控...
全志R16平台编译linux系统V1.0.txt 2017/4/11 13:36 (编译请使用编译android的lichee的选项编译生成的.config文件,不然直接编译会报错!!!!) rootroot@cm-System-Product-Name:/home/wwt/linux_r16$ tar...
8. **启动与服务管理**:熟悉`systemd`服务管理系统,如何启动、停止、重启服务,以及阅读和服务单元文件来理解服务的启动流程。 9. **进程与内存问题**:学习如何查找僵尸进程和孤儿进程,使用`pstack`查看进程...
1. **系统监控工具**:如`top`、`htop`、`mpstat`、`vmstat`和`iostat`,它们分别用于查看CPU、内存、进程和I/O状态,提供实时性能指标。 2. **性能事件探查器**:例如`perf`,它是Linux内核自带的一款强大的性能...
1. **系统监控工具**:Linux提供了丰富的系统监控工具,如`top`、`htop`、`iostat`、`vmstat`、`mpstat`和`free`等,用于实时查看CPU使用率、内存占用、磁盘I/O和网络状态。理解这些工具的使用方法,可以帮助我们...
- **iostat/dstat/atop等工具的使用**:监测系统I/O性能。 - **IO系统整体架构**:包括通用块层、IO调度层、块设备驱动层、SCSI子系统等。 - **Buffered I/O/Raw I/O**:缓冲I/O和原始I/O的区别。 **文件系统:** -...
常用工具包括ifconfig、ethereal、tcpdump、iptraf、wconfig、nfsstat、mrtg、netstat等。调优策略可以是调整网卡配置,如使用ifconfig和iwconfig,以及通过sysctl修改网络相关参数,以提高网络吞吐量和减少延迟。 ...
1. **性能监控工具**:书中介绍了如`top`, `vmstat`, `iostat`, `mpstat`, `netstat`和`dstat`等常用的Linux性能监控工具。这些工具可以帮助我们实时查看CPU、内存、磁盘I/O和网络的状态,找出系统瓶颈。 2. **系统...
以上命令和技巧覆盖了Ubuntu系统中常见的管理和操作需求,从软件包管理到系统信息查询,再到硬盘和网络的高级配置,为Ubuntu用户提供了一个全面的指南。熟练掌握这些命令,能够显著提高系统的管理效率和问题解决能力...
- **网络瓶颈定位**: 利用`netstat`、`tcpdump`等工具监测网络流量,识别网络拥塞或高延迟的问题所在。 - **I/O瓶颈定位**: 通过`iostat`等工具监测磁盘I/O活动,识别出频繁的读写操作导致的性能问题。 #### 三、...
在Linux系统优化中,性能监测是一项至关重要的环节,它涵盖了CPU、内存、磁盘I/O和网络等多个子系统。通过对这些关键领域的监测,可以找出系统的性能瓶颈,从而进行有针对性的优化。下面我们将逐一探讨这些子系统的...
- **sar**: 系统活动报告工具,用于收集和报告系统活动信息。例如,`sar -u`显示CPU利用率报告。 - **vmstat**: 显示虚拟内存统计信息。例如,`vmstat`显示虚拟内存的统计信息。 - **iostat**: 显示磁盘I/O统计信息...