2024年常用Linux网络 内存 磁盘分析工具_fnr > 2(1)

uptime 
dmesg | tail 
vmstat 1 
mpstat -P ALL 1 
pidstat 1 
iostat -xz 1 
free -m 
sar -n DEV 1 
sar -n TCP,ETCP 1 
top

0x01:网络IO

1、sar -n DEV 1 3 监控网卡IO
2、ethtool 网卡名 查看网卡的最大速率等参数信息
3、netstat -nat | awk ‘FNR>2{print $NF}’ | sort | uniq -c 查看系统TIME_WAIT状态连接数
4、查看DND信息dig命令

dig baidu.com # 输出host的cname记录与A记录,可以看到ip地址和使用的DNS服务器信息,添加` +short`可以简化输出
dig -x 204.152.184.167 +short # 用 -x的选项查找IP地址的主机名
dig @ns1.google.com www.google.com 指定查询的DNS server

tcpdump

tcpdump -D # 显示可以抓取的所有网络接口
# 抓取9100端口,网卡xgbe0的TCP网络包信息,保存到aaa.pcap
tcpdump tcp port 9100 -i xgbe0 -nn -s 0 -XX -w aaa.pcap

# 指定目的或者源ip,可以使用and,or
tcpdump -i eth0 src and dst 172.16.11.1 and port 80 -nn -s 0 -XX -w aaa.pcap

# 指定主机
tcpdump -i eth0 host 172.16.11.1 and port 80 -nn -s 0 -XX -w aaa.pcap

# 抓取http包,一般是eth0,xgbe0,可以加上port 80作为条件,这里是指本机接收http请求的80端口,发出端口为随机
tcpdump -i xgbe0 -nn -s 0 -XX -w yq41.pcap

wireshark分析网络包
1、tcpdump保存的文件是二进制的文件,需要下载到本地用wireshark查看
2、过滤器:tcp.stream
3、抓包参数和结果解析

CPU

1、mpstat -P ALL 1 1 查看cpu占用率波动情况;也可以top,然后1
2、taskset绑定进程或者线程到指定CPU的核

taskset -cp pid   查看进程所属核
taskset -acp pid   查看进程及所有线程的所属核
taskset -pc 3 pid   表示将进程pid绑定到第3个核上
taskset -a -pc 3 pid  表示将进程pid(包括所有线程)绑定到第3个核上
taskset -cp 1,2,3 pid

pidstat 用于监控全部或指定进程的cpu、内存、线程、设备IO等系统资源的占用情况

# 查看CPU
pidstat -p pid 3 3
# 查看进程内存状态,用ps效果一样,RSS单位为KB
pidstat -r -p 26716 3 3
# 查看进程磁盘IO
pidstat -d -p 26716 3 3
# 查看进程上下文切换
pidstat -wt -p 26716 3 3
# 查看进程中的线程信息
pidstat -t -p 26716 3 3

vmstat 2 1 查看系统上下文切换

内存

top

CPU使用状况 1.02%us, 0%sy, 0%ni, 98.98%id, 0%wa, 0%irq, 0%softirq

us:用户空间占用CPU百分比
sy:内核空间占用CPU百分比
ni:用户进程空间内改变过优先级的进程占用CPU百分比
id:空闲CPU百分比
wa:等待输入输出的CPU时间百分比
hi:硬件中断
si:软件中断
st:实时

1、top命令常用参数
2、P,M分别是按cpu和内存排序;mac系统使用o + 列名
3、sar -u 1 3 监控CPU状态
4、top -p 345 查看指定pid=345的进程,在mac中用-pid代替-p
5、%cpu参数不可靠,需要1查看每个CPU的使用率才可靠
free

-g```:以GB为显示单位,也可以-m以MB为显示单位

name |    total   |    used    |   free  |   shared  |  buffers |cached
--- | --- | --- | --- | --- | --- | ---
Mem: | 125 | 125 | 0 | 0 | 0 | 109 |
-/+ buffers/cache: | | 15(上一行的used - buffers - cached) | 110(上一行的 free + buffers + cached)
Swap: | 0 | 0 | 0

对操作系统来讲,为了内存利用率最大化,会把剩余内存申请为cached,所以系统运行时间长了,cached就会比较大,对于频繁读写的系统就更加明显。used 和 free都是Mem的参数,所以 buffers/cached这两项对于操作系统来讲都是已经被使用的内存,所以呢 free的就比较少;

而对于应用程序来说呢,buffers/cached等同于可用的内存,因为buffers/cached可提高程序执行的性能,当程序使用内存时,buffers/cached很快就会被使用。

所以从应用程序的角度来看,应以(-/+ buffers/cached)的free 和 used为主,即我们主要与他相关的free和used就可以了

我们在观察Linux的内存使用情况时,只要没发现用swap的交换空间,就不必担心自己的内存太少。如果常常看到swap用了很多,那么你就要考虑加物理内存了,可以用`vmstat`查看swap IO状况。这也是在Linux服务器上看内存是否够用的标准。因为swap用的多,说明OS把本应该存在物理内存中的部分内存页调度到了磁盘,腾出空间给当前进程使用,等到其他进程运行时才会把这部分内存页再次调度到物理内存。

#### buffer/cache/shared memory区别与联系

#### pmap
1. 查看进程内存分布状况,可以用来分析线程堆栈:`pmap -d 12345 # 12345 是进程号`

#### 清理linux cache
Kernels 2.6.16 and newer provide a mechanism to have the kernel drop the page cache and/or inode and dentry caches on command, which can help free up a lot of memory.

This is a non-destructive operation and will only free things that are completely unused. Dirty objects will continue to be in use until written out to disk and are not freeable. If you run "sync" first to flush them out to disk, these drop operations will tend to free more memory.

    To free pagecache:
    # echo 1 > /proc/sys/vm/drop\_caches

    To free dentries and inodes:
    # echo 2 > /proc/sys/vm/drop\_caches

    To free pagecache, dentries and inodes:
    echo 3 > /proc/sys/vm/drop_caches


> 遇到报错:```tcpdump: can't create rx ring on packet socket: cannot allocate memory```, 可以使用该命令清除cache

### 磁盘IO

#### 磁盘IOPS和Throughput

1. 磁盘的 IOPS,也就是在一秒内磁盘进行多少次 I/O 读写。磁盘的吞吐量,也就是每秒磁盘 I/O 的流量,即磁盘写入加上读出的数据的大小。每秒 I/O 吞吐量= IOPS\* 平均 I/O SIZE
2. 随机读写频繁的应用,如OLTP(Online Transaction Processing),IOPS是关键衡量指标;对于大量顺序读写的应用,如VOD(Video On Demand),则更关注吞吐量指标。

#### 影响IOPS的因素

1. 第一个\*\*寻址时间\*\*,考虑到被读写的数据可能在磁盘的任意一个磁道,既有可能在磁盘的最内圈(寻址时间最短),也可能在磁盘的最外圈(寻址时间最长),所以在计算中我们只考虑平均寻址时间,也就是磁盘参数中标明的那个平均寻址时间,这里就采用当前最多的10krmp硬盘的5ms。
2. 第二个\*\*旋转延时\*\*,和寻址一样,当磁头定位到磁道之后有可能正好在要读写扇区之上,这时候是不需要额外额延时就可以立刻读写到数据,但是最坏的情况确实要磁盘旋转整整一圈之后磁头才能读取到数据,所以这里我们也考虑的是平均旋转延时,对于10krpm的磁盘就是(60s/10k)\*(1/2) = 2ms。
3. 第三个\*\*传送时间\*\*,磁盘参数提供我们的最大的传输速度,当然要达到这种速度是很有难度的,但是这个速度却是磁盘纯读写磁盘的速度,因此只要给定了单次 IO的大小,我们就知道磁盘需要花费多少时间在数据传送上,这个时间就是IO Chunk Size / Max Transfer Rate。

#### I/O 读写的类型

大体上讲,I/O 的类型可以分为:读 / 写 I/O、大 / 小块 I/O、连续 / 随机 I/O, 顺序 / 并发 I/O。在这几种类型中,我们主要讨论一下:大 / 小块 I/O、连续 / 随机 I/O, 顺序 / 并发 I/O。

##### 大 / 小块 I/O

这个数值指的是控制器指令中给出的连续读出扇区数目的多少。如果数目较多,如 64,128 等,我们可以认为是大块 I/O;反之,如果很小,比如 4,8,我们就会认为是小块 I/O,实际上,在大块和小块 I/O 之间,没有明确的界限。

##### 连续 / 随机 I/O

连续 I/O 指的是本次 I/O 给出的初始扇区地址和上一次 I/O 的结束扇区地址是完全连续或者相隔不多的。反之,如果相差很大,则算作一次随机 I/O

连续 I/O 比随机 I/O 效率高的原因是:在做连续 I/O 的时候,磁头几乎不用换道,或者换道的时间很短;而对于随机 I/O,如果这个 I/O 很多的话,会导致磁头不停地换道,造成效率的极大降低。

##### 顺序 / 并发 I/O

从概念上讲,并发 I/O 就是指向一块磁盘发出一条 I/O 指令后,不必等待它回应,接着向另外一块磁盘发 I/O 指令。对于具有条带性的 RAID(LUN),对其进行的 I/O 操作是并发的,例如:raid 0+1(1+0),raid5 等。反之则为顺序 I/O。

#### [磁盘I/O那些事]( )

Linux下的IO监控与分析
  1. iostat -xm 1 1: 监控CPU状态和磁盘IO
  2. iostat命令输出详解
系统端口占用信息和进程信息
  • lsof | grep pid/pname查看进程信息
  • lsof -i:port查看端口号port使用的进程号和连接情况
  • lsof -i@ip:port使用@host:port来显示指定到指定主机的连接
  • lsof -iTCP显示TCP连接
  • lsof -c abc显示 abc 进程现在打开的文件
  • lsof -p 12看进程号为 12 的进程打开了哪些文件
  • netstat -np/c/atux | grep pid/port/pname查看进程号所占用的端口号和端口占用情况
  • netstat -n | grep tcp | grep 侦听端口 | wc -l : 监听端口连接数
  • netstat -nat | grep 3306 -c : 查看数据库连接使用数目
  • ps aux只能看到pid等信息,不能看到端口号
  • ps -eLf | grep java | wc -l: 监控java进程的线程数, 或者ps -eLf | grep 27955 -c
  • ps -eo pid,pcpu | sort -rn -k 2 | less 查看CPU高占用的进程pid
  • ps H -eo pid,tid,pcpu | sort -rn -k 3 | less 查看CPU高占用的pid及线程id
  • cat /proc/进程号/task/线程号/status 查看线程具体信息
  • printf "%x\n" 7444 线程id转成十六进制,可以用于jstack dump信息的搜索id
  • 远程登录 telnet hostname
sar命令查看网络、磁盘、CPU、内存信息

sar - Collect, report, or save system activity information.

参数说明

-A 汇总所有的报告
-a 报告文件读写使用情况
-B 报告附加的缓存的使用情况
-b 报告缓存的使用情况
-c 报告系统调用的使用情况
-d 报告磁盘的使用情况
-g 报告串口的使用情况
-h 报告关于buffer使用的统计数据
-m 报告IPC消息队列和信号量的使用情况
-n 报告命名cache的使用情况
-p 报告调页活动的使用情况
-q 报告运行队列和交换队列的平均长度
-R 报告进程的活动情况
-r 报告没有使用的内存页面和硬盘块
-u 报告CPU的利用率
-v 报告进程、i节点、文件和锁表状态
-w 报告系统交换活动状况
-y 报告TTY设备活动状况

系统平均load负载

sar -q 2 2

参数:

runq-sz:运行队列的长度(等待CPU时间片来运行的进程数)
plist-sz:进程列表中进程(processes)和线程(threads)的数量
ldavg-1:最后1分钟的系统平均负载 ldavg-5:过去5分钟的系统平均负载
ldavg-15:过去15分钟的系统平均负载

查看内存信息

sar -r 1 3

参数解释:

kbmemfree:剩余可用内存、单位K
kbmemused:已用内存、以K 为单位、该值不考虑内核自身所使用的内存
%memused:已用内存百分比
kbbuffers:已用buffer(内核所用)、单位K
kbcached:已用cache(内核所用)、单位K
kbswpfree:剩余Swap、单位K
kbswpused:已用Swap、单位K
%swpused:已用Swap百分比
**先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前在阿里**

**深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。**
![img](https://img-blog.csdnimg.cn/img_convert/4fdadb369294c8f9419e80f98b2a160f.png)
![img](https://img-blog.csdnimg.cn/img_convert/c784796fe3a27dc3f28bb35eb5f385a6.png)
![img](https://img-blog.csdnimg.cn/img_convert/fc72cd61406716e57d295ad81e373e76.png)
![img](https://img-blog.csdnimg.cn/img_convert/04b2379ff218928dd0a39de75043187b.png)
![img](https://img-blog.csdnimg.cn/img_convert/a0cb80f76a96354eb476c125b9a1432c.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化的资料的朋友,可以点击这里获取!](https://bbs.csdn.net/topics/618542503)**

g-0DQCPtDv-1714493921849)]
[外链图片转存中...(img-6a7pIjQt-1714493921849)]
[外链图片转存中...(img-MMnLXLb2-1714493921849)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化的资料的朋友,可以点击这里获取!](https://bbs.csdn.net/topics/618542503)**

  • 19
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值