监控io性能
使用iostat命令查看磁盘负载情况
iostat -x
重点关注:%util占比,如果这个值越大则表示你的硬盘越忙,这也会是你系统变慢的原因;
查看具体哪个进程在读写,使用iotop,首次使用需要Yum安装
yum install -y iotop
安装完成之后一般就可以使用,此处本人使用的是centos7.5版本运行iotop出现了一个错误,提示文件有问题:
经过查询及群里小伙伴的分享,才找到原因:
新版本linux系统的status信息不一定都是:\t来分割信息的了。iotop还没更新过来,所以分割会出现有些信息分割出来只有一个key,没有value.目前iotop还没更新过来,所以临时解决办法就是跳过这些分割出来只有一列的信息。
解决办法:
编辑图示标红文件,找到196行,添加如下代码:
if not line.strip() : continue
python中格式空格比较重要,注意缩进问题,添加如下图所示,然后:wq保存退出使用即可
使用 iotop 命令继续查看具体进程:
iotop
free命令
查看当前系统的总内存大小以及使用内存的情况。Centos7比Centos6更加简洁了一些,但大体内容一致。
使用 free 命令
[root@yolks1 ~]# free
total used free shared buff/cache available
Mem: 1865276 151884 1492120 8924 221272 1535144
Swap: 2097148 0 2097148
展示的几列代表的意思分别是:
- total : 内存总大小
- used:真正使用的实际内存大小
- free:剩余物理内存大小(没有被分配,纯剩余)
- shared:共享内存大小,不用关注它
- buff/cache:buffer和cache都是一部分内存,内存的作用就是缓解CPU和IO的速度差距的
- available:系统可以使用内存有多大
** cache内存 : 磁盘(慢)--->> 内存(cache) --->> cpu(快) **
** buffer内存 :cpu(快)--->> 内存(buffer) --->> 磁盘(慢) **
** available = free + 欲分配buff/cache **
** total = used + available**
free还有-m的用法(表示以M为单位)或者使用-h(以合适的大小显示内存)
[root@yolks1 ~]# free -m
total used free shared buff/cache available
Mem: 1821 148 1457 8 216 1499
Swap: 2047 0 2047
[root@yolks1 ~]# free -h
total used free shared buff/cache available
Mem: 1.8G 148M 1.4G 8.7M 216M 1.5G
Swap: 2.0G 0B 2.0G
重点关注点 : ** available **
ps命令
查看系统进程
使用ps命令查看默认不带参数
[root@yolks1 ~]# ps
PID TTY TIME CMD
1389 pts/0 00:00:00 bash
2417 pts/0 00:00:00 ps
由于默认显示的内容有限,常用的选项有 -aux 或 -elf查看进程详细信息
筛选指定的任务进程 -aux | grep * 过滤
[root@yolks1 ~]# ps aux |grep sshd
root 959 0.0 0.2 110212 4096 ? Ss 20:31 0:00 /usr/sbin/sshd -D
root 1387 0.0 0.2 154088 5232 ? Ss 20:31 0:00 sshd: root@pts/0
root 2477 0.0 0.0 112676 980 pts/0 R+ 21:53 0:00 grep --color=auto sshd
展示常用列含义:
- USER : 用户
- PID : 表示进程的id,这个id很有用。在linux中,内核管理进程就得靠pid来识别和管理某一个进程,比如这里想要终止一个进程,则用命令“kill 进程的id”,有的时候这样并不能关闭某些进程,需要加-9选项,但你这样有些强行(暴力),严重的话可能会丢失数据,所以尽量不用。
- STAT : 表示进程的状态
- D:不能中断的进程(通常为IO)
- R:正在运行的进程,包含等待CPU时间片的进程
- S:已经中断的进程。通常情况下,系统的大部分进程都是这个状态
- T:已经停止或者暂停的进程。
- Z:僵尸进程,即杀不掉,打不死的垃圾进程,占用系统一点资源,不过没有关系。如果占用太多,则需要重视
- <:高优先级进程
- N:底优先级进程
- L:在内存中被锁了内存分页
- s:主进程
- l:多线程进程
- +:在前台运行的进程,比如在当前终端执行的ps aux就是前台进程
查看网络状态
netstat : 用于打印网络连接状况、系统所开放端口、路由表等信息
选项:
- lnp : 打印当前系统启动哪些端口
- lntp : 打印当前系统Internet connections服务端口
- lndp : 打印当前系统UNIX domain服务端口
- an : 打印网络连接状况
使用an选项或lndp查看到有1列State状态,具体值参考tcp/ip协议的通信状态文章,如下链接
分享拓展:统计目前系统各通信的计数命令(客户端和服务端在通信数量,1000 以内都是正常的)
netstat -an |awk '/^tcp/ {++sta[$NF]} END {for(key in sta) print key,"\t",sta[key]}'
上面命令使用语法参考文章:
linux抓包
抓包(packet capture)就是将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作,也用来检查网络安全。抓包也经常被用来进行数据截取等。
tcpdump
使用yum安装
yum install -y tcpdump
tcpdump工具常用来查看某个网卡上的数据流向即网络行为,尤其发现网络流量异常时,使用抓包工具进行抓取ip分析行为
常用参数 -nn (以ip地址显示) 这里由于使用的虚拟机所以需要指定网卡加了 -i(指定网卡名称) 参数,命令输完回车,屏幕会不断打印出字符,字符串不停刷新,这些内容就是传输数据的流向过程以及数据包,这里重点关注 第三列和第四列 如上图圈出所示,表示从哪个 ip+端口 连接到哪个 ip+端口,Ctrl+C 退出程序。
选项
- w : 保存抓取结果到指定的路径 (tcpdump -nn -i ens33 not port 22 -c 10 -w /tmp/tcpdump_test.cap)
- c : 指定抓包数量
cap文件读取方式
tcpdump -r xxx.cap
常用结合:
tcpdump -nn -i ens33 port 22 //指定抓取22端口的包
tcpdump -nn -i ens33 not port 22 //指定抓取除了22端口以外的包
tcpdump -nn -i ens33 tcp and not port 22 //指定抓取tcp的包,但排除掉22端口的
tcpdump -nn -i ens33 port 22 and port 24 //指定抓取只有22和24端口的包
linux下更多抓包选项参考文章 :
wireshark
yum安装
yum install -y wireshark
抓取指定端口的命令
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"
常用用法: