Linux性能优化-常用命令摘要【1】uptime
功能,检查启动时间、登录用户、平均负载等。通常用于确定操作系统的重启时间;
#正常运行时间1:01:52UP天,22336003,4个用户,平均负载: 0.13,0.08,0.05结果分析当前时间,1:01:52系统已经运行的时间,在线用户43天22小时3分钟前,4个用户,这是连接总数,但不是不同用户的平均系统负载(一个用户通过一个终端连接),平均系统负载是指特定时间间隔内队列中运行的平均进程数。
如果进程满足以下条件,它将位于运行队列中
1.它没有等待I/O操作的结果。
2.它没有主动进入等待状态(也就是说,它没有调用与' wait '相关的系统API)
3.没有停止。
如果当前每个CPU核心的活动进程数不超过3,则系统的性能可以支持
如果每个CPU核的任务数大于5,这台机器的性能就有严重问题。
如果linux主机是双核CPU,当平均负载为6时,机器已经被充分利用。
负载值分析
当负载为0.7时,系统处于空闲状态,可以考虑部署更多的服务。
在0.7负载1下,系统处于良好状态。
当load==1时,系统很快就会处理完,所以赶紧找出原因。
负载5,系统已经很忙了。
1) 1分钟负载5,5分钟负载3,15分钟负载1短期忙,中长期闲。初步判断是抖动或拥塞的迹象。
2) 1分钟负载5、5分钟负载3、15分钟负载1短期忙,中期紧张,很可能是拥堵的开始。
3) 1分钟负载5,5分钟负载5,15分钟负载5短中长期都很忙,系统拥塞。
4) 1分钟负载1,5分钟负载3,15分钟负载5短时Uchikoga,中长期繁忙,系统拥塞正在改善。
【2】pidstat
监控所有或指定进程占用的系统资源的功能,包括CPU、内存、磁盘I/O、进程切换、线程数和其他数据;
-u,表示查看cpu相关的性能指标。
-w,表示检查上下文切换。
-t,检查线程相关的信息,默认是进程的;
与-w结合使用(cpu上下文切换包括进程切换、线程切换和中断切换)
-d,表示磁盘I/O统计信息。
-p,表示进程号
命令格式, pidstat interval #输出CPU的使用信息-u 0:48:12pm uid PID % usr % system % guest % CPU CPU命令0:48:12pm 0 24615 0.00 0 0.00 0 0.00 0 0 nginx CPU信息%usr #用户级任务正在使用CPU %system # CPU%在系统级执行的任务%guest # CPU%正在运行的虚拟机%CPU # CPU #使用的处理器数量#命令#命令# 输出内存的使用信息-r 0:48:12pm uid PID min FLT/s maj FLT/s vsz RSS % mem command 0:48:12pm 0 24615 0.00 0.00 58252 24940 1.32 nginx内存信息PID #编号minflt/s #次要页面错误)#每秒#页面错误,即虚拟内存地址映射到物理内存地址maj产生的页面错误一般内存使用紧张时生成vsz #此进程使用的虚拟内存(kB) RSS #此进程使用的物理内存(kB) %MEM #当前任务使用的有效内存的百分比命令#任务的命令名称#输出磁盘I/O使用信息-d 03:48:12pm uid PID kB _ rd/s kB _ wr/s kB _ ccwr/s Command 0:48:12pm 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);
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 占用率的统计信息;
功能,用于实时监控系统 CPU 的一些统计信息,这些信息存放在 /proc/stat 文件中,在多核 CPU 系统里,不但能查看所有 CPU 的平均使用信息,还能查看某个特定 CPU 的信息;
命令格式,mpstat <-P {cpu|ALL}>
功能,用于监控 CPU 占用率、平均负载值及 I/O 读写速度等;
功能,查看交互分区的使用情况
【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 模式
$ 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
添加图片注释,不超过 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 #查看校验启动状态