一、linux性能优化与参数优化理论
系统硬件资源
CPU
如下
内存
由于处理器寻址范围的限制,在32位Linux操作系统上,应用程序单个进程最大只能使用G4B的内存,这样以来,即使系统有更大的内存,应用程序也无法“享”用。
解决的办法就是使用64位处理器,安装64位操作系统。在64位操作系统下,可以满足所有应用程序对内存的使用需求,几乎没有限制。
使用uname -a,查看linux操作系统是多少位。下面可看出是x86的架构和64位的处理器。
磁盘
磁盘的I/O性能直接影响应用程序的性能,在一个有频繁读写的应用中,如果磁盘I/O性能得不到满足,就会导致应用停滞。好在现今的磁盘都采用了很多方法来提高I/O性能,比如常见的磁盘RAID技术。
通过RAID技术组成的磁盘组,就相当于一个大硬盘,用户可以对它进行分区格式化、建立文件系统等操作,跟单个物理硬盘一模一样,唯一不同的是RAID磁盘组的I/O性能比单个硬盘要高很多,同时在数据的安全性也有很大提升。
RAID技术介绍:
根据磁盘组合方式的不同,RAID可以分为RAID0,RAID1、RAID2、RAID3、RAID4、RAID5、RAID6、RAID7、RAID0+1、RAID10等级别,常用的RAID级别有RAID0、RAID1、RAID5、RAID0+1,这里进行简单介绍。
RAIDO:通过把多块硬盘粘合成一个容量更大的硬盘组,提高了磁盘的性能和吞吐量。这种方式成本低,要求至少两个磁盘,但是没有容错和数据修复功能,因而只能用在对数据安全性要求不高的环境中。
RAID1:也就是磁盘镜像,通过把一个磁盘的数据镜像到另一个磁盘上,最大限度地保证磁盘数据的可靠性和可修复性,具有很高的数据冗余能力,但磁盘利用率只有50%,因而,成本最高,多用在保存重要数据的场合。
网络宽带
Linux下的各种应用,一般都是基于网络的,因此网络带宽也是影响。性能的一个重要因素,低速的、不稳定的网络将导致网络应用程序的访问阻塞,而稳定、高速的网络带宽,可以保证应用程序在网络上畅通无阻地运行。幸运的是,现在的网络一般都是千兆带宽或光纤网络,带宽问题对应用程序性能造成的影响也在逐步降低。
操作系统相关资源优化
内核参数优化
系统安装完成后,优化工作并没有结束,接下来还可以对系统内核参数进行优化,不过内核参数的优化要和系统中部署的应用结合起来整体考虑。
例如,如果系统部署的是Oracle数据库应用,那么就需要对系统共享内存段(kernel.shmmax、kernel.shmmni、kernel.shmall)系统信号量(kernel.sem)、文件句柄(fs.file-max)等参数进行优化
如果部署的是Web应用,那么就需要根据Web应用特性进行网络参数的优化,例如修改net.ipv4.ip_local_port_range、net.ipv4.tcp_tw_reuse、net.core.somaxconn等网络内核参数。
文件系统优化
目前服务器端ext4和xfs是主流文件系统,如何选择合适的文件系统,需要根据文件系统的特点加上业务的需求综合来定
ext4 vs xfs 核心对比
特性 | ext4 | xfs |
---|---|---|
最大文件尺寸 | 16TB(单文件) | 8EB(理论值) |
日志模式 | 有序(ordered)、回写(writeback) | 元数据日志(metadata journaling) |
碎片化 | 较高(需定期碎片整理) | 低(动态分配extent) |
适用场景 | 小文件频繁读写(如数据库日志) | 大文件高并发(如视频存储) |
注意:1024TB=1EB
系统安装优化
安装时对磁盘的划分对磁盘的I/O读写很重要。安装前可以看看具体怎么自动以划分。
swap,虚拟内存,需要结合业务是否启动,例如安装k8s和数据库是不建议使用的,速度没有真正的内存块。
centos内核参数优化
iptable
如非必须,关掉或卸载iptables防火墙,并阻止 kernel加载iptables模块。这些模块会影响并发性能。
方法1:
单进程最大打开文件数限制
一般的发行版,限制单进程最大可以打开1024个文件,这是远远不能满足高并发需求的,调整过程如下:
[root@192 ~]# ulimit -n #查看到默认是1024
1024
[root@192 ~]# ulimit -n 65535 #设置为65535
如果修改报错“Operationnotpemitted”之类的话,说明上述限制修改失败,实际上是因为在中指定的数值超过
了Linux系统对该用户打开文件数的软限制或硬限制,因此,就需要修改Linux系统对用户的关于打
开文件数的软限制和硬限制(得百度搜搜了)。
二、linux实用故障排查
cpu
物理cpu:
指主板上实际安装的 独立 CPU 芯片(即 CPU 插槽的数量)。例如:服务器主板上安装了 2 个 Intel Xeon 处理器,则物理 CPU 个数为 2。
查看物理cpu个数:
lscpu
逻辑cpu:
指操作系统识别和调用的 虚拟 CPU 数量,包括物理核心和超线程(Hyper-Threading)虚拟出的核心。例如:1 个物理 CPU 有 4 个核心,每个核心启用超线程(2 线程),则逻辑 CPU 数为 4 × 2 = 8
查看逻辑cpu个数:
[root@192 ~]# nproc --all
4
cpu文件
查看cpu文件
[root@192 ~]# cat /proc/cpuinfo
查看系统cpu使用率
在生产集群中我们通常通过top来查看cpu的使用率来判断系统的负载情况,Top然后按1,可以看到cpu的使用率。
top
第一行:
top - 22:36:54 up 44 min, 4 users, load average: 0.61, 3.80, 2.63
当前时间:22:36:54
运行时间:系统已启动 44 分钟(
up 44 min
)。登录用户:4 个用户已登录。
负载平均值(Load Average):
0.61
(1 分钟平均)3.80
(5 分钟平均)2.63
(15 分钟平均)分析:
5 分钟负载 (
3.80
) 显著高于 1 分钟 (0.61
),表明 近期有过高负载,但当前已下降。如果 CPU 核心数为 4,则 5 分钟负载
3.80
表示过去 5 分钟系统接近满负荷(需结合%Cpu
进一步判断)。
解析: load average: 0.61, 3.80, 2.63
单核 CPU:
1.00
= CPU 完全饱和(100% 使用率)。>1.00
= 有任务在排队等待 CPU 资源。
多核 CPU(N 核):
N.00
= 所有核心完全饱和(如 4 核 CPU,4.00 表示满负荷)。>N.00
= 任务排队,可能性能瓶颈。
第二行:
Tasks: 198 total, 1 running, 197 sleeping, 0 stopped, 0 zombie
总进程数:198 个。
运行状态:
1 running
:1 个进程正在运行(通常是top
自身或其他活跃进程)。197 sleeping
:197 个进程处于休眠(等待事件)。0 stopped/zombie
:无停止进程或僵尸进程(健康状态)。
第三行:
%Cpu(s): 0.0 us, 0.1 sy, 0.0 ni, 99.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
这个是看cup总使用率的
用户态 (
us
):0.0% → 无用户程序占用 CPU。内核态,也就是系统本身 (
sy
):0.1% → 极少量内核操作。空闲 (
id
):99.9% → CPU 几乎完全空闲。其他指标:
wa
=0.0%:无 I/O 等待(磁盘/网络无阻塞)。st
=0.0%:非虚拟化环境,或虚拟机未受宿主机资源争抢。
矛盾点(那是我在5在这5分钟内测试了cpu执行了多个死循环,后面都关闭了):
负载平均值高(5 分钟
3.80
)但 CPU 空闲(99.9% id
),可能原因:I/O 密集型任务:虽然 CPU 空闲,但磁盘或网络曾繁忙(但当前
wa=0.0
否定这一点)。短时进程爆发:高负载由已结束的短时进程导致(如编译任务、批量脚本)。
统计延迟:负载平均值是历史数据,CPU 利用率是实时快照。
内存
free
free -g
free 和free -g 但它们的 输出单位 和 显示精度 有所不同,前者是kb,后面是G(大约值,没有kb准确)
磁盘I/O
磁盘种类
磁盘种类:sata(150M/s左右)sas(300 M/S左右)ssd(最快也最贵)。一般磁盘2T-4T,服务器支持的最大存储也不同,比较常见的48T,一般服务器可以支持12-24块盘。
iostat -mx 2查看磁盘I/O(读写)的繁忙程度
[root@192 home]# iostat -mx 2
解析:
iostat 是个命令,-mx是个参数,2是2秒刷新一次。
我们只要关注%util就行,磁盘利用率的百分比,也就是磁盘繁忙程度的百分百,100% 表示磁盘满负荷。
如果没有该iostat命令,安装一下
[root@192 home]# yum install sysstat -y
dh查看磁盘情况
dh -h查看磁盘还剩多少可以用
dh -T查看文件类型
组合dh -Th
查看当前目录挂载的哪个磁盘、查看磁盘类型、查看当前目录磁盘的可用空间
df -Th .
df -Th
、fdisk -l、lsblk使用区别
维度 | df -Th |
fdisk -l |
lsblk |
---|---|---|---|
信息类型 | 已挂载文件系统的使用情况 | 磁盘分区表原始信息 | 块设备树形结构 |
挂载点 | ✅ 明确显示 | ❌ 不显示 | ✅ 显示 |
文件系统 | ✅ 显示类型 | ❌ 不显示 | 需 lsblk -f 显示 |
未挂载设备 | ❌ 不显示 | ✅ 显示 | ✅ 显示 |
适用场景 | 检查磁盘剩余空间 | 分区管理/修复 | 查看设备拓扑关系 |
新加磁盘
cat /etc/fstab查看磁盘挂载信息。
新加磁盘要手动永久挂载需要在这个配置文件里添加。如果这个文件写错了,重启服务器正常模式下是启动不了的!!!
cat /etc/fstab内容格式:
修改cat /etc/fstab肯定是要分区好后才执行这个永久挂载配置的。先看看如何分区 创作中心-CSDN再挂载吧。