iostat和iotop命令,free,ps,netstat,tcpdump命令
一、监控io性能,iostat和iotop命令
1. iostat -x
%util 表示你的IO等待,磁盘使用有多少时间占用CPU,等待IO比率如果比较高说明磁盘IO比较差,
2. iotop
如果没有iotop命令,先使用yum install -y 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
1452 be/4 root 0.00 B/s 0.00 B/s 0.00
% 0.05 % [kworker/0:2]
动态查看磁盘的性能,关注IO>这一列,为进程占用IO的百分比。
二、free命令
1. free 查看内存使用状况,不加任何选项默认单位KBN,-m以M为单位显示,-h更加直观,会加上单位
[[email protected] ~]# free
total used free shared buff/cache available
Mem: 1883484 137260 1412468 8808 333756 1557704
Swap: 4194300 0 4194300
total
表示总共的内存
used 使用的内存
free 剩余的内存,系统会将一部分的内存预分配给buff/cache
buffer 缓冲 CPU处理完的数据,先是存储到内存,内存再写到磁盘中
cache 缓存 磁盘的数据先存到内存中,内存再交给CPU处理
total = used + free + buff/cache
available包含free 和 buff/cache的剩余部分
三、ps命令
1.ps aux
ps -elf 这两个命令是差不多的,静态的列出系统所有的进程
root 3825 0.0 0.0 112676 984 pts/2 S+ 19:05 0:00 grep --color=auto nginx
2.
[[email protected] ~]#
ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 193700 6828 ? Ss 04:49 0:07 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root 2 0.0 0.0 0 0 ? S 04:49 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 04:49 0:00 [ksoftirqd/0]
USER 进程的运行用户
PID 进程的ID,proc下有很多数字的目录,这些数字就是进程的PID
%CPU 进程占用CPU的百分比
%MEM 内存的百分比
VSZ 虚拟内存
RSS 物理内存
tty
是在哪一个终端上运行的
START 什么时候启动
TIME
启动了多长时间
COMMAND 进程的名字
STAT 进程的状态:
D 不能中断的进程
R run状态的进程,是说某一个时间段内在使用CPU
S Sleep状态的进程,
T 暂停的进程
+ 前台的进程
Z 僵尸进程
< 高优先级的进程
N 低优先级的进程
L 内存中被锁了内存分页的进程
s 主进程
I 多线程进程,
四、netstat命令
1. netstat -lnp 查看端口状态
[[email protected] ~]#
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:29237 0.0.0.0:* LISTEN 1344/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1432/master
tcp 0 0 :::29237 :::* LISTEN 1344/sshd
tcp 0 0 ::1:25 :::* LISTEN 1432/master
udp 0 0 0.0.0.0:68 0.0.0.0:* 1191/dhclient
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node PID/Program name Path
unix 2 [ ACC ] STREAM LISTENING 10199 1/init @/com/ubuntu/upstart
unix 2 [ ACC ] STREAM LISTENING 12325 1432/master public/cleanup
unix 2 [ ACC ] STREAM LISTENING 12330 1432/master private/tlsmgr
unix 2 [ ACC ] STREAM LISTENING 12333 1432/master private/rewrite
2. 查看各种连接状态的个数,需要关注ESTABLISHED这一项,如果数值比较大那说明系统比较忙,并发连接数
[[email protected] ~]#
netstat -an | awk '/^tcp/ {++sta[$NF]} END {for(key in sta) print key,"\t",sta[key]}'
ESTABLISHED 1
LISTEN 4
netstat 查看tcp/ip的通讯状态,
-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态
-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。
3. ss -an 与netstat的功能类似
[[email protected] ~]# ss -an
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 :::29237 :::*
LISTEN 0 128 *:29237 *:*
LISTEN 0 100 ::1:25 :::*
LISTEN 0 100 127.0.0.1:25 *:*
ESTAB 0 336 104.225.232.200:29237
五、tcpdump命令
1. tcpdump -nn n表示ip用数字显示,不加会显示主机名,
[[email protected] ~]#
tcpdump -nn -i ens33
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
21:54:38.936580 IP 192.168.177.7.22 > 192.168.177.1.50813: Flags [P.], seq 3361883341:3361883553, ack 91951291, win 296, length 212
21:54:38.953246 IP 192.168.177.7.22 > 192.168.177.1.50813: Flags [P.], seq 212:408, ack 1, win 296, length 196
21:54:38.955643 IP 192.168.177.1.50813 > 192.168.177.7.22: Flags [.], ack 408, win 256, length 0
21:54:38.963467 IP 192.168.177.7.22 > 192.168.177.1.50813: Flags [P.], seq 408:668, ack 1, win 296, length 260
21:54:38.964449 IP 192.168.177.7.22 > 192.168.177.1.50813: Flags [P.], seq 668:832, ack 1, win 296, length 164
21:54:38.965842 IP 192.168.177.1.50813 > 192.168.177.7.22: Flags [.], ack 832, win 254, length 0
21:54:38.966482 IP 192.168.177.7.22 > 192.168.177.1.50813: Flags [P.], seq 832:1092, ack 1, win 296, length 260
21:54:38.980042 IP 192.168.177.7.22 > 192.168.177.1.50813: Flags [P.], seq 1092:1256, ack 1, win 296, length 16
2. tcpdump -i port -i指定网卡 port指定端口
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
21:59:00.316147 IP 192.168.177.7.22 > 192.168.177.1.50813: Flags [P.], seq 3362083261:3362083473, ack 91954343, win 296, length 212
21:59:00.317023 IP 192.168.177.7.22 > 192.168.177.1.50813: Flags [P.], seq 212:408, ack 1, win 296, length 196
21:59:00.317540 IP 192.168.177.7.22 > 192.168.177.1.50813: Flags [P.], seq 408:572, ack 1, win 296, length 164
21:59:00.318108 IP 192.168.177.1.50813 > 192.168.177.7.22: Flags [.], ack 408, win 253, length 0
21:59:00.318793 IP 192.168.177.7.22 > 192.168.177.1.50813: Flags [P.], seq 572:832, ack 1, win 296, length 260
3. tcpdump -c -w
-c指定抓包的个数,-w将抓到的包写入文件
[[email protected] ~]#
tcpdump -nn -i ens33 port 22 -c 5 -w pack.txt
#指定抓包的网卡ens33,端口22,抓取5个包,写入文件pack.txt
tcpdump: listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
5 packets captured
5 packets received by filter
0 packets dropped by kernel
4.
tcpdump -r
读取抓到的包的内容
[[email protected] ~]#
tcpdump -r pack.txt
reading from file pack.txt, link-type EN10MB (Ethernet)
22:00:57.811249 IP localhost.localdomain.ssh > 192.168.177.1.50813: Flags [P.], seq 3362098157:3362098305, ack 91956611, win 296, length 148
22:00:57.859069 IP 192.168.177.1.50813 > localhost.localdomain.ssh: Flags [.], ack 148, win 254, length 0
22:01:22.617629 IP 192.168.177.1.50813 > localhost.localdomain.ssh: Flags [P.], seq 1:69, ack 148, win 254, length 68
22:01:22.627152 IP localhost.localdomain.ssh > 192.168.177.1.50813: Flags [P.], seq 148:216, ack 69, win 296, length 68
22:01:22.682824 IP 192.168.177.1.50813 > localhost.localdomain.ssh: Flags [.], ack 216, win 253, length 0
5.tshark
yum install -y wireshark #安装软件
以下的用法可以显示访问http请求的域名以及uri
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"
指定80端口web访问的情况
以下可以抓取mysql的查询
tshark -n -i eth1 -R 'mysql.query' -T fields -e "ip.src" -e "mysql.query"
tshark -i eth1 port 3307 -d tcp.port==3307,mysql -z "proto,colinfo,mysql.query,mysql.query"