龙空技术网

Linux性能优化——常用命令总结

Linux技术宅 816

前言:

今天大家对“linux优化工具”大约比较珍视,大家都需要剖析一些“linux优化工具”的相关内容。那么小编也在网络上汇集了一些有关“linux优化工具””的相关资讯,希望小伙伴们能喜欢,朋友们快快来学习一下吧!

Linux 性能优化 -- 常用命令总结

【1】uptime

功能,查看机器的启动时间、登录用户、平均负载等情况,通常用于确定操作系统的重启时间;

[root@VM_0_3_centos src]# uptime13:01:52 up 46 days, 22:03, 4 users, load average: 0.13, 0.08, 0.05结果分析    当前时间,13:01:52    系统已经运行的时间,43 天 22 小时 3 分钟    前在线用户,4 个用户,是总连接数量,不是不同用户数量 (开一个终端连接就算一个用户)    系统平均负载,0.13,0.08,0.05,为最近 1 分钟、5 分钟、15 分钟的系统负载情况

系统的平均负载是指在特定的时间间隔内队列中运行的平均进程数;

如果一个进程满足以下条件,就会位于运行队列中

1. 它没有在等待 I/O 操作的结果

2. 它没有主动进入等待状态 (即没有调用’wait'相关的系统 API)

3. 没有被停止

如果每个 CPU 内核的当前活动进程数不大于 3,则系统的性能可以支持

如果每个 CPU 内核的任务数大于 5,那么这台机器的性能有严重问题

如果 linux 主机是 1 个双核 CPU,当 Load Average 为 6 的时候说明机器已经被充分使用了

load 值分析

load < 0.7 时,系统很闲,要考虑多部署一些服务

0.7 < load < 1 时,系统状态不错

load == 1 时,系统马上要处理不多来了,赶紧找一下原因

load > 5 时,系统已经非常繁忙

1) 1 分钟 load > 5,5 分钟 load < 3,15 分钟 load < 1 短期内繁忙,中长期空闲,初步判断是一个抖动或者是拥塞前兆

2) 1 分钟 load > 5,5 分钟 load > 3,15 分钟 load < 1短期内繁忙,中期内紧张,很可能是一个拥塞的开始

3) 1 分钟 load > 5,5 分钟 load > 5,15 分钟 load > 5 短中长期都繁忙,系统正在拥塞

4) 1 分钟 load < 1,5 分钟 Load > 3,15 分钟 load > 5 短期内空闲,中长期繁忙,系统拥塞正在好转

【2】pidstat

功能,用于监控全部或指定的进程占用系统资源的情况,包括 CPU、内存、磁盘 I/O、进程切换、线程数等数据;

-u,表示查看 cpu 相关的性能指标

-w,表示查看上下文切换情况

-t,查看线程相关的信息,默认是进程的;

常与 -w 结合使用 (cpu 的上下文切换包括进程的切换、线程的切换、中断的切换)

-d,表示磁盘 I/O 统计数据

-p,指明进程号

命令格式,pidstat [option] interval [count] # 输出 CPU 的使用信息 -u03:48:12 PM 	UID 	PID 	%usr 	%system 	%guest 	%CPU 	CPU 	Command03:48:12 PM   	0 		24615 	0.00 	0.00 		0.00 	0.00 	0 		nginx CPU 信息• %usr 		#用户层任务正在使用的 CPU 百分比• %system 	#系统层正在执行的任务的 CPU 使用百分比• %guest 	#运行虚拟机的 CPU 占用百分比• %CPU 		#所有的使用的 CPU 的时间百分比• CPU 		#处理器数量• Command 	#命令 # 输出内存的使用信息 -r03:48:12 PM 	UID PID 	minflt/s 	majflt/s 	VSZ 	RSS 	%MEM 	Command03:48:12 PM 	0 	24615 	0.00 		0.00 		58252 	24940 	1.32 	nginx 内存信息• PID 		#进程号• minflt/s 	#每秒次缺页错误次数(minor page faults)			#缺页错误次数即虚拟内存地址映射成物理内存地址产生的 page fault 次数• majflt/s 	#每秒主缺页错误次数(major page faults)			#当虚拟内存地址映射成物理内存地址时,相应的 page 在 swap 中,                这样的 page fault 为 major page fault,一般在内存使用紧张时产生• VSZ 		#该进程使用的虚拟内存(以 kB 为单位)• RSS 		#该进程使用的物理内存(以 kB 为单位)• %MEM 		#当前任务使用的有效内存的百分比• Command 	#任务的命令名 # 输出磁盘 I/O 的使用信息 -d03:48:12 PM 	UID 	PID 	kB_rd/s 	kB_wr/s 	kB_ccwr/s 	Command03:48:12 PM 	0 		24615 	0.07 		0.00 		0.00 		nginx 磁盘 I/O• PID 		#进程号• kB_rd/s 	#每秒此进程从磁盘读取的千字节数• kB_wr/s 	#此进程已经或者将要写入磁盘的每秒千字节数• kB_ccwr/s #由任务取消的写入磁盘的千字节数• Command 	#命令的名字 # 输出上下文切换的信息 -w03:20:54 PM 	UID 	PID 	cswch/s 	nvcswch/s 	Command03:20:54 PM 	0 		24615 	0.03 		0.00 		nginx 上下文切换• PID 		#PID 号• cswch/s 	#每秒自动上下文切换• nvcswch/s #每秒非自愿的上下文切换• Command 	#命令

文章福利:点击下方领取最新面试题资料,文档视频资料包私信【1】进群

CC++Linux后端服务器10家大厂开发面试题全集

【3】free

功能,用于显示系统内存的使用情况,包括总体内存、己经使用的内存,系统内核使用的缓冲区,包括缓冲(buffer) 和缓存(cache);

[root@VM_0_3_centos ~]# free		total 	used 	free 	shared 	buff/cache 	availableMem: 	1882356 994348 	78308 	548 	809700 		679524Swap: 	8191996 473600 	77183961. Mem 行,内存的使用情况2. Swap 行,交换空间的使用情况• total 列显示系统总的可用物理内存和交换空间大小• used 列显示已经被使用的物理内存和交换空间• free 列显示还有多少物理内存和交换空间可用使用• shared 列显示被共享使用的物理内存大小• buff/cache 列显示被 buffer 和 cache 使用的物理内存大小• available 列显示还可以被应用程序使用的物理内存大小

free 与 available 的区别

free 是真正尚未被使用的物理内存数量;

available 是从应用程序的角度看到的可用内存数量;

Linux 内核为了提升磁盘操作的性能,会消耗一部分内存去缓存磁盘数据,即 buffer 和 cache;对于内核来说,buffer 和 cache 都属于已经被使用的内存;当应用程序需要内存时,如果没有足够的 free 内存可以用,内核就会从 buffer 和 cache 中回收内存来满足应用程序的请求;

从应用程序的角度来说,available = free + buffer + cache;

Buffer 与 Cache

1、Buffer(缓冲区)是系统两端处理速度平衡(从长时间尺度上看)时使用的;

它的引入是为了减小短期内突发 I/O 的影响,起到流量整形的作用;

比如生产者——消费者问题,由于产生和消耗资源的速度大体接近,加一个 buffer 可以抵消掉资源刚产生/消耗时的突然变化;

2、Cache(缓存)则是系统两端处理速度不匹配时的一种折衷策略;

因为 CPU 和 memory 之间的速度差异越来越大,通过充分利用数据的局部性(locality)特征,通过使用存储系统分级(memory hierarchy)的策略来减小这种差异带来的影响;

【4】vmstat

此命令显示关于内核线程、虚拟内存、磁盘 I/O 、陷阱和 CPU 占用率的统计信息;

[root@VM_0_3_centos ~]# vmstatprocs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----r b swpd 	free 	buff 	cache 	si 	so 	bi 	bo 	in 	cs 	us 	sy 	id 	wa 	st4 0 473600 	77560 	60640 	749436 	0 	0 	51 	56 	2 	8 	2 	2 	92 	4 	0• buff,I/O 系统存储的磁盘块文件的元数据的统计信息• cache,操作系统用来缓存磁盘数据的缓冲区	操作系统会自动一调节这个参数,在内存紧张时操作系统会减少 cache 的占用空间来保证其他进程可用• cs,线程环境的切换次数,此数据太大时表明线程的同步机制有问题• si 和 so 较大时,说明系统频繁使用交换区,应该查看操作系统的内存是否够用• bi 和 bo 代表 I/O 活动,根据其大小可以知道磁盘 I/O 的负载情况

【5】mpstat

功能,用于实时监控系统 CPU 的一些统计信息,这些信息存放在 /proc/stat 文件中,在多核 CPU 系统里,不但能查看所有 CPU 的平均使用信息,还能查看某个特定 CPU 的信息;

命令格式,mpstat [-P {cpu|ALL}] [internal [count]]当 mpstat 不带参数时,输出为从系统启动以来的平均值 [root@VM_0_3_centos ~]# mpstat -P ALLLinux 3.10.0-957.5.1.el7.x86_64 (VM_0_3_centos) 08/22/2019 _x86_64_ (1CPU) 05:00:44 PM CPU 	%usr 	%nice 	%sys 	%iowait %irq %soft 	%steal 	%guest 	%gnice 	%idle05:00:44 PM all 	1.67 	0.00 	1.65 	4.21 	0.00 0.02 	0.00 	0.00 	0.00 	92.4505:00:44 PM 0 		1.67 	0.00 	1.65 	4.21 	0.00 0.02 	0.00 	0.00 	0.00 	92.45 命令参数	-P {cpu l ALL} 表示监控哪个 CPU,cpu 在 [0, cpu 个数 - 1] 中取值	internal 相邻的两次采样的间隔时间	count 采样的次数,count 只能和 internal 一起使用输出参数	当没有参数时,mpstat 则显示系统启动以后所有信息的平均值;	有 interval 时,第一行的信息为自系统启动以来的平均信息;从第二行开始,输出为前一个 interval 时间段的平均信息;输出各参数含义参数 	释义 																	从/proc/stat 获得数据CPU 	处理器 ID%usr	在 internal 时间段里,用户态的 CPU 时间(%),不包含 nice 值为负进程 	    usr/total*100%nice 	在 internal 时间段里,nice 值为负进程的 CPU 时间(%) 					    nice/total*100%sys 	在 internal 时间段里,核心时间(%) 									    system/total*100%iowait 在 internal 时间段里,硬盘 IO 等待时间(%) 							    iowait/total*100%irq 	在 internal 时间段里,硬中断时间(%) 									irq/total*100%soft 	在 internal 时间段里,软中断时间(%) 									softirq/total*100%steal 	显示虚拟机管理器在服务另一个虚拟处理器时虚拟 CPU 处在非自愿等待下花费时间的百分比 steal/total*100%guest 	显示运行虚拟处理器时 CPU 花费时间的百分比 								    guest/total*100%gnice 																			  gnice/total*100%idle 	在 internal 时间段里,CPU 除去等待磁盘 IO 操作外的因为任何原因而空闲的时间闲置时间(%)  idle/total*100

【6】iostat

功能,用于监控 CPU 占用率、平均负载值及 I/O 读写速度等;

[root@VM_0_3_centos ~]# iostatLinux 3.10.0-957.5.1.el7.x86_64 (VM_0_3_centos) 08/22/2019 _x86_64_ (1CPU)avg-cpu: 	%user 	%nice 	%system %iowait %steal 	%idle			1.67 	0.00 	1.68 	4.21 	0.00 	92.45Device: tps 	kB_read/s 	kB_wrtn/s 	kB_read 	kB_wrtnvda 	8.81 	50.73 		56.14 		205202201 	227051208scd0 	0.00 	0.00 		0.00 		314 		0 cpu 的统计信息,如果是多 cpu 系统,显示的所有 cpu 的平均统计信息• %user,用户进程消耗 cpu 的比例• %nice,用户进程优先级调整消耗的 cpu 比例• %sys,系统内核消耗的 cpu 比例• %iowait,等待磁盘 io 所消耗的 cpu 比例• %idle,闲置 cpu 的比例(不包括等待磁盘 I/O) 磁盘的统计信息• tps,该设备每秒的传输次数,"一次传输"意思是"一次 I/O 请求"	多个逻辑请求可能会被合并为"一次 I/O 请求","一次传输"请求的大小是未知的• kB_read/s,每秒从设备读取的数据量;• kB_wrtn/s,每秒向设备写入的数据量;• kB_read,读取的总数据量;• kB_wrtn,写入的总数量数据量; [root@VM_0_3_centos ~]# iostat -xLinux 3.10.0-957.5.1.el7.x86_64 (VM_0_3_centos) 08/22/2019 _x86_64_ (1CPU)avg-cpu: 	%user 	%nice 	%system %iowait %steal 	%idle			1.67 	0.00 	1.68 	4.21 	0.00 	92.45Device: rrqm/s 	wrqm/s 	r/s 	w/s 	rkB/s wkB/s avgrq-sz 	avgqusz await r_await 	w_await svctm 	%utilvda 	0.07 	6.22 	2.70 	6.11 	50.73 56.14 24.26 		0.18 	23.92 25.03 	23.44 	4.69 	4.13scd0 	0.00 	0.00 	0.00 	0.00 	0.00  0.00 	7.14 		0.00 	0.86  0.86 		0.00 	0.86 	0.00 输出消息• rrqm/s,每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并• wrqm/s,每秒对该设备的写请求被合并次数• r/s,每秒完成的读次数• w/s,每秒完成的写次数• rkB/s,每秒读数据量(kB 为单位)• wkB/s,每秒写数据量(kB 为单位)• avgrq-sz,平均每次 IO 操作的数据量(扇区数为单位)• avgqu-sz,平均等待处理的 IO 请求队列长度• await,平均每次 IO 请求等待时间(包括等待时间和处理时间,毫秒为单位)• svctm,平均每次 IO 请求的处理时间(毫秒为单位)• %util,采样周期内用于 IO 操作的时间比率,即 IO 队列非空的时间比率

【7】swapon

功能,查看交互分区的使用情况

[root@VM_0_3_centos ~]# swapon -sFilename 	Type Size 		Used 	Priority/var/swap 	file 8191996 	473856 	-2

swap 分区,当实际内存不够用的时候,操作系统会从内存中取出一部分暂时不用的数据,放在交换分区中,从而为当前运行的程序腾出足够的内存空间;

【8】ifconfig

功能,用于查看机器挂载的网卡情况

参数• add<地址> 设置网络设备 IPv6 的 IP 地址• del<地址> 删除网络设备 IPv6 的 IP 地址• down 关闭指定的网络设备• <hw<网络设备类型><硬件地址> 设置网络设备的类型与硬件地址• io_addr<I/O 地址> 设置网络设备的 I/O 地址• irq<IRQ 地址> 设置网络设备的 IRQ• media<网络媒介类型> 设置网络设备的媒介类型• mem_start<内存地址> 设置网络设备在主内存所占用的起始地址• metric<数目> 指定在计算数据包的转送次数时,所要加上的数目• mtu<字节> 设置网络设备的 MTU• netmask<子网掩码> 设置网络设备的子网掩码• tunnel<地址> 建立 IPv4 与 IPv6 之间的隧道通信地址• up 启动指定的网络设备• -broadcast<地址> 将要送往指定地址的数据包当成广播数据包来处理• -pointopoint<地址> 与指定地址的网络设备建立直接连线,此模式具有保密功能• -promisc 关闭或启动指定网络设备的 promiscuous 模式• [IP 地址] 指定网络设备的 IP 地址• [网络设备] 指定网络设备的名称

$ ifconfig eth0eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500      inet 10.240.0.30 netmask 255.240.0.0 broadcast 10.255.255.255      inet6 fe80::20d:3aff:fe07:cf2a prefixlen 64 scopeid 0x20<link>      ether 78:0d:3a:07:cf:3a txqueuelen 1000 (Ethernet)      RX packets 40809142 bytes 9542369803 (9.5 GB)      RX errors 0 dropped 0 overruns 0 frame 0      TX packets 32637401 bytes 4815573306 (4.8 GB)      TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 1. 网络接口的状态标志,ifconfig 输出中的 RUNNING 表示物理网络是连通的,即网卡已经连接到了交换机或者路由器中;2. MTU 的大小,MTU 默认大小是 1500,根据网络架构的不同,可能需要调大或者调小 MTU 的数值;3. 网络接口的 IP 地址、子网以及 MAC 地址4. 网络收发的字节数、包数、错误数以及丢包情况,    特别是 TX 和 RX 部分的 errors、dropped、overruns、carrier 以及 collisions 等指标不为 0 时,通常表示出现了网络 I/O 问题    errors 表示发生错误的数据包数,比如校验错误、帧同步错误等;    dropped 表示丢弃的数据包数,即数据包已经收到了 Ring Buffer,但因为内存不足等原因丢包;    overruns 表示超限数据包数,即网络 I/O 速度过快,导致 Ring Buffer 中的数据包来不及处理 (队列满) 而导致的丢包;    carrier 表示发生 carrirer 错误的数据包数,比如双工模式不匹配、物理电缆出现问题等;    collisions 表示碰撞数据包数

【9】ping

功能,用于检测网络故障的常用命令,可以用来测试一台主机到另外一台主机的网络是否连通

语法ping [-dfnqrRv][-c<完成次数>][-i<间隔秒数>][-I<网络界面>][-l<前置载入>][-p<范本样式>][-s<数据包大小>][-t<存活数值>][主机名称或 IP 地址]• -d 使用 Socket 的 SO_DEBUG 功能• -c<完成次数> 设置完成要求回应的次数• -f 极限检测• -i<间隔秒数> 指定收发信息的间隔时间• -I<网络接口> 使用指定的网络接口送出数据包• -l<前置载入> 设置在送出要求信息之前,先行发出的数据包• -n 只输出数值• -p<范本样式> 设置填满数据包的范本样式• -q 不显示指令执行过程,开头和结尾的相关信息除外• -r 忽略普通的 Routing Table,直接将数据包送到远端主机上• -R 记录路由过程• -s<数据包大小> 设置数据包的大小• -t<存活数值> 设置存活数值 TTL 的大小• -v 详细显示指令的执行过程

连通性和延时测试 # -c3 表示发送三次ICMP包后停止$ ping -c3 114.114.114.114PING 114.114.114.114 (114.114.114.114) 56(84) bytes of data.64 bytes from 114.114.114.114: icmp_seq=1 ttl=54 time=244 ms64 bytes from 114.114.114.114: icmp_seq=2 ttl=47 time=244 ms64 bytes from 114.114.114.114: icmp_seq=3 ttl=67 time=244 ms --- 114.114.114.114 ping statistics ---3 packets transmitted, 3 received, 0% packet loss, time 2001msrtt min/avg/max/mdev = 244.023/244.070/244.105/0.034 ms     ping 目标主机的域名和 IP (ping 会自动将域名转换为 IP)    不带包头的包大小和带包头的包大小    icmp_seq,ping 序列,从 1 开始;如果数字不是按顺序递增即意味着产生丢包    ttl,剩余的 ttl;    time,响应时间,数值越小,连通速度越快;    发出去的包数,返回的包数,丢包率,耗费时间;    最小/最大/平均响应时间和本机硬件耗费时间; TTL,每经过一个‘路由点‘,就把预先设定的这个 TTL 数值减 1,直到最后 TTL=1 时报文就被扔掉,不向下转发; ping 显示的 TTL 是指,被 ping 主机那里返回的报文,到达用户端,从预设的 TTL 减小到还剩下多少;

【10】nc

功能,验证服务器端口有没有开发

参数-l 用于指定 nc 将处于侦听模式;指定该参数,则意味着 nc 被当作 server,侦听并接受连接,而非向其它地址发起连接-s 指定发送数据的源 IP 地址,适用于多网卡机-u 指定 nc 使用 UDP 协议,默认为 TCP-v 输出交互或出错信息-w 超时秒数,后面跟数字 命令示例nc -l 9999 # 开启一个本地 9999 的 TCP 协议端口,由客户端主动发起连接,一旦连接必须由服务端发起关闭nc -vw 2 129.204.197.215 11111 # 通过 nc 去访问 129.204.197.215 主机的 11111 端口,确认是否存活;nc -ul 9999 # 开启一个本地 9999 的 UDP 协议端口,由服务端主动发起关闭nc 129.204.197.215 9999 < test # 通过 129.204.197.215 的 9999 TCP 端口发送数据文件nc -l 9999 > zabbix.file # 开启一个本地 9999 的 TCP 端口,用来接收文件内容

【11】nslookup

功能,检测网络中 DNS 服务器能否正确解析域名并且可以输出

添加图片注释,不超过 140 字(可选)

【12】mtr

功能,Linux 系统中的网络连通性测试工具,也可以用来检测丢包率

添加图片注释,不超过 140 字(可选)

【13】traceroute

功能,提供从用户的主机到互联网另一端的主机的路径,虽然每次数据包由同一出发点到达同一目的地的路径可能会不一样,但通常来说大多数情况下路径是相同的;

添加图片注释,不超过 140 字(可选)

【14】sar

功能,输出每秒的网卡存取速度

添加图片注释,不超过 140 字(可选)

【15】netstat/ss

功能,用于显示网络连接、端口信息等

# head -n 3 表示只显示前面3行# -l 表示只显示监听套接字# -n 表示显示数字地址和端口(而不是名字)# -p 表示显示进程信息$ netstat -nlp | head -n 3Active Internet connections (only servers)Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program nametcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      840/systemd-resolve # -l 表示只显示监听套接字# -t 表示只显示 TCP 套接字# -n 表示显示数字地址和端口(而不是名字)# -p 表示显示进程信息$ ss -ltnp | head -n 3State    Recv-Q    Send-Q        Local Address:Port        Peer Address:PortLISTEN   0         128           127.0.0.53%lo:53               0.0.0.0:*        users:(("systemd-resolve",pid=840,fd=13))LISTEN   0         128                 0.0.0.0:22               0.0.0.0:*        users:(("sshd",pid=1459,fd=3)) 接收队列 (Recv-Q) 和发送队列 (Send-Q)    通常应该是 0,当它们不是 0 时,说明有网络包的堆积发生    当套接字处于连接状态 (Established)时,        Recv-Q 表示套接字缓冲还没有被应用程序取走的字节数 (即接收队列长度)        Send-Q 表示还没有被远端主机确认的字节数 (即发送队列长度)    当套接字处于监听状态 (Listening)时,        Recv-Q 表示全连接队列的长度        Send-Q 表示全连接队列的最大长度 所谓全连接,是指服务器收到了客户端的 ACK,完成了 TCP 三次握手,然后就会把这个连接放到全连接队列中;    这些全连接中的套接字需要被 accept() 系统调用取走,服务器才可以开始真正处理客户端的请求所谓半连接是指还没有完成 TCP 三次握手的连接,连接只进行了一半,服务器收到了客户端的 SYN 包后,    就会把这个连接放到半连接队列中,然后再向客户端发送 SYN + ACK 包

【16】nmap

功能,扫描某一主机打开的端口及端口提供的服务信息,通常用于查看本机有哪些端口对外提供服务,或者服务器有哪些端口对外开放

示例nmap localhost 						#查看主机当前开放的端口nmap -p 1024-65535 localhost 		#查看主机端口(1024-65535)中开放的端口nmap -PS 192.168.56.101 			#探测目标主机开放的端口nmap -PS22,80,3306 192.168.56.101 	#探测所列出的目标主机端口nmap -O 192.168.56.101 				#探测目标主机操作系统类型nmap -A 192.168.56.101 				#探测目标主机操作系统类型

【17】ethtool

功能,用于查看网卡的配置情况

命令使用格式 ethtool [option] interface

添加图片注释,不超过 140 字(可选)

使用示例 (1)查看网卡的接口信息ethtool eth1     #查看网络接口 eth1 的信息(2)关闭网卡 eth1 的自动协商ethtool -s eth1 autoneg off(3)修改网卡速率为 100Mb/sethtool -s eth4 speed 100(4)查看网卡驱动信息ethtool -i eth0(5)查看网卡的一些工作统计信息ethtool –S eth0(6)停止和查看网卡的发送模块 TX 的状态ethtool -A tx off eth0      #修改 tx 的状态ethtool -a eth0             #查看 tx 的状态(7)关闭网卡对收到的数据包的校验功能ethtool -K rx off eth0      #关闭校验ethtool –k eth0             #查看校验启动状态

标签: #linux优化工具 #centos mtr #linux查看网卡实时速率命令 #linux优化命令 #linux优化有哪些