评价 Linux 系统性能的好坏,大致可以从 Linux 完成任务的有效性、稳定性以及响应速度等方面进行考量。线上业务,可能经常会遇到系统不稳定、响应速度慢等问题。
例如,在 Linux 系统搭建了一个 Web 服务,就可能出现网页无法打开、打开速度慢等现象。这里,操作系统在完成某个任务时,与系统自身设置、网络拓扑结构、路由设备、接入设备、物理线路等多个方面都密切相关,任何一个环节出现问题,都会影响整个系统的性能。
对于 Linux 系统来说,当运行应用程序出现问题时,要从应用程序本身、操作系统、服务器硬件和网络环境等方面综合排查,深度剖析问题出现在哪个部分,才能有针对性地解决性能问题。
当看到性能指标时,你会首先想到什么呢?我相信“高并发”和“响应快”一定是最先出现在你脑海里的两个词,而它们也正对应着性能优化的两个核心指标——“吞吐”和“延时”。这两个指标是从应用负载的视角来考察性能,直接影响了产品终端的用户体验。跟它们对应的,是从系统资源的视角出发的指标,比如资源使用率、饱和度等。
性能指标是衡量系统性能的评价标准,常用的系统性能指标包括:响应时间、并发用户/并发、点击率、吞吐量、TPS/QPS、PV/UV;Linux服务器常用的性能指标包括:CPU使用率、内存占用率、磁盘IO、网络带宽延迟、系统平均负载等。
CPU
CPU 是操作系统稳定运行的根本,CPU 的速度与性能很大一部分决定了系统整体的性能,因此 CPU 数量越多、主频越高,服务器性能也就相对越好。反之,cpu空闲使用率越低,系统性能越差。
内存
内存的大小也是影响 Linux 性能的一个重要的因素。内存太小,系统进程将被阻塞,应用也将变得缓慢,甚至失去响应;内存太大,会导致资源浪费。
Linux 系统采用了物理内存和虚拟内存的概念,虚拟内存虽然可以缓解物理内存的不足,但是占用过多的虚拟内存,应用程序的性能将明显下降。要保证应用程序的高性能运行,物理内存一定要足够大,但不应过大,否则会造成内存资源的浪费。
磁盘读写(I/O)能力
磁盘的 I/O 能力会直接影响应用程序的性能。比如说,在一个需要频繁读写的应用中,如果磁盘 I/O 性能得不到满足,就会导致应用的停滞。
网络带宽
Linux 下的各种应用基于网络进行交互,因此网络带宽也是影响性能的一个重要因素,低速的、不稳定的网络将导致网络应用程序的访问阻塞;而稳定、高速的带宽,可以保证应用程序在网络上畅通无阻地运行。
1、选择指标评估应用程序和系统的性能;
2、为应用程序和系统设置性能目标;
3、进行性能基准测试;
4、性能分析定位瓶颈;
5、优化系统和应用程序;
6、性能监控和告警。
?
CPU篇示例:
1)使用sar查看系统 CPU 的整体负载状况,每 3 秒统计一次,统计 5 次,可以执行如下命令:
[root@localhost ~]# sar -u 3 5
Linux 2.6.32-431.el6.x86_64 (localhost) ? ? 10/25/2019 ? ? _x86_64_ ? ?(1 CPU)
06:18:23 AM ? ? CPU ? ? %user ? ? %nice ? %system ? %iowait ? ?%steal ? ? %idle
06:18:26 AM ? ? all ? ? 12.11 ? ? ?0.00 ? ? ?2.77 ? ? ?3.11 ? ? ?0.00 ? ? 82.01
Average: ? ? ? ?all ? ? ?8.83 ? ? ?0.00 ? ? ?2.09 ? ? ?0.63 ? ? ?0.00 ? ? 88.46
此输出结果中,各个列表项的含义分别如下:
%user:用于表示用户模式下消耗的 CPU 时间的比例;
%nice:通过 nice 改变了进程调度优先级的进程,在用户模式下消耗的 CPU 时间的比例;
%system:系统模式下消耗的 CPU 时间的比例;
%iowait:CPU 等待磁盘 I/O 导致空闲状态消耗的时间比例;
%steal:利用 Xen 等操作系统虚拟化技术,等待其它虚拟 CPU 计算占用的时间比例;
%idle:CPU 空闲时间比例。
?
2)使用mpstat查看系统 CPU 的负载状况
mpstat命令提供各处理器活动的统计数据,所有数据均来自/proc。
默认mpstat仅显示系统整体概要。下例显示各个处理器的报告,报告间隔为一秒钟
CPU列显示逻辑处理器ID,all表示所有处理器平均值
%usr列显示执行user space的进程CPU使用率
%sys 列显示执行kernel space的进程CPU使用率
%idle列显示处理器空闲时间所占百分比
?
内存篇示例:
free命令可以列出可用和已用的物理内存和swap内存
-b、-k、-m、-g 选项分别以字节、KB、MB或GB单位输出.-s选项将显示一个参数,该参数代表刷新间隔秒数。例如,free -s 1代表每隔1秒刷新━次
# free -m
? ? ? ? ? ? ? total ? ? ? ?used ? ? ? ?free ? ? ?shared ?buff/cache ? available
Mem: ? ? ? ? ?31661 ? ? ? ? 389 ? ? ? 28598 ? ? ? ? ?25 ? ? ? ?2674 ? ? ? 30994
Swap: ? ? ? ? 16383 ? ? ? ? ? 0 ? ? ? 16383
buff/cache和available列中数值接近零表明内存不足。如果可用内存超过总内存的20%,已用内存接近总内存,则这些数值表示系统正常。
IO篇示例:
iostat命令显示各磁盘的I/O统计数据,并提供工作负载、利用率和饱和度等指标
.iostat使用内核计数器来收集统计信息,负载很低
iostat -c会显示CPU使用报告,iostat -d会显示磁盘I/O使用报告。iostat -y省略自系统启动以来的统计数据。-z选项省略任何无活动的设备。
- tps:每秒处理的事务数,又称IOPS.
- kB_read/s:每秒读取的KB数
.-kB_wrtn/s:每秒写入的KB数
- kB_read:已读取的总KB数
- kB_wrtn:已写入的总KB数
?
?
?
网络篇示例:
1、使用sar查看系统网络的整理负载状况
[root@localhost ~]# sar -n ?DEV 1 1
Linux 3.10.0-957.el7.x86_64 (vincent) ? 11/09/2022 ? ? ?_x86_64_ ? ? ? ?(8 CPU)
11:24:44 PM ? ? IFACE ? rxpck/s ? txpck/s ? ?rxkB/s ? ?txkB/s ? rxcmp/s ? txcmp/s ?rxmcst/s
11:24:45 PM ? ? ens32 ? ? ?3.00 ? ? ?0.00 ? ? ?0.21 ? ? ?0.00 ? ? ?0.00 ? ? ?0.00 ? ? ?0.00
IFACE ?本地网卡接口的名称
rxpck/s ?每秒钟接受的数据包
txpck/s ?每秒钟发送的数据库
rxKB/S ?每秒钟接受的数据包大小,单位为KB
txKB/S ?每秒钟发送的数据包大小,单位为KB
rxcmp/s ?每秒钟接受的压缩数据包
txcmp/s ?每秒钟发送的压缩包
rxmcst/s ?每秒钟接收的多播数据包?
?
CPU
sysbench: 是一款开源的多线程性能测试工具, 可以执行 CPU/内存/线程/IO/数据库等方面的性能测试. 数据库目前支持 MySQL/Oracle/PostgreSQL。
unixbench:一个用于测试unix系统性能的工具,也是一个比较通用的benchmark。
内存
memtester:Memtester主要是捕获内存错误和一直处于很高或者很低的坏位, 其测试的主要项目有随机值,异或比较,减法,乘法,除法,与或运算等等. 通过给定测试内存的大小和循环次数, 可以对系统现有的内存进行项目的测试。
stream:Stream测试是内存测试中业界公认的内存带宽性能测试基准工具,stream由Virginia University提供,通过生成四种不同模式下的内存读写操作,用于测试高性能计算机的内存带宽。
磁盘
1、利用dd来进行测试:
time dd if=/dev/zero of=test bs=1M count=4096 ?//用top和iostat查看wa%及写硬盘速度
2、使用fio命令进行测试:
FIO是测试IOPS的非常好的工具,用来对硬件进行压力测试和验证,支持13种不同的I/O引擎。
网络
Iperf是一款基于TCP/IP和UDP/IP的网络性能测试工具,它可以用来测量网络带宽和网络质量。
1、使用工具监测系统各类性能指标。
2、分别找出系统中cpu使用率和内存使用top10进程。
?