linux性能调整和故障排查

发布于:2025-07-24 ⋅ 阅读:(30) ⋅ 点赞:(0)

一、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 -Thfdisk -l、lsblk使用区别

维度 df -Th fdisk -l lsblk
信息类型 已挂载文件系统的使用情况 磁盘分区表原始信息 块设备树形结构
挂载点 ✅ 明确显示 ❌ 不显示 ✅ 显示
文件系统 ✅ 显示类型 ❌ 不显示 lsblk -f 显示
未挂载设备 ❌ 不显示 ✅ 显示 ✅ 显示
适用场景 检查磁盘剩余空间 分区管理/修复 查看设备拓扑关系

新加磁盘

cat /etc/fstab查看磁盘挂载信息。

新加磁盘要手动永久挂载需要在这个配置文件里添加。如果这个文件写错了,重启服务器正常模式下是启动不了的!!!

cat /etc/fstab内容格式:

修改cat /etc/fstab肯定是要分区好后才执行这个永久挂载配置的。先看看如何分区 创作中心-CSDN再挂载吧。


网站公告

今日签到

点亮在社区的每一天
去签到