当前位置: 首页 > news >正文

Linux 系统性能调优

概述

       在日常运维和架构优化中,Linux 性能调优是提高系统稳定性和运行效率的重要手段。本文结合工作经验,总结了 Linux 服务器常见的优化技巧,涵盖 CPU、内存、磁盘 I/O、网络等多个方面,帮助大家在不同场景下快速定位和优化系统性能瓶颈。

目录

概述

一、CPU 调优

1.1 监控 CPU 负载

1.2 调整 CPU 运行模式

1.3 限制进程 CPU 使用

二、内存优化

2.1 监控内存使用情况

2.2 关闭不必要的服务

2.3 禁用或调整 swap

2.4 增加内存分配限制

三、磁盘 I/O 优化

3.1 监控 I/O 负载

3.2 调整 I/O 调度算法

3.3 启用 TRIM(适用于 SSD)

3.4 增加文件系统缓存

四、网络优化

4.1 监控网络流量

4.2 调整 TCP 参数

4.3 调整连接追踪表大小

五、进程与文件句柄优化

5.1 增加最大文件描述符

5.2 调整最大进程数

5.3 限制 Zombie 进程

六、系统级别优化

6.1 禁用 SELinux(若无安全需求)

6.2 优化日志记录

6.3 关闭 IPv6(若不使用)


一、CPU 调优

1.1 监控 CPU 负载

使用 top htop 观察 CPU 使用率:

top -d 1  # 每秒刷新一次
htop       # 更直观的界面

关键指标:

  • load average(系统平均负载):通常不应超过 CPU 核心数的 70%
  • %us(用户态CPU占用):业务进程消耗
  • %sy(内核态CPU占用):系统调用消耗
  • %wa(IO等待):高 IO 可能是磁盘瓶颈
  • %st(偷取时间):虚拟化环境中 CPU 被其他虚拟机占用

或者使用 mpstat 查看每个 CPU 核心的使用情况:

mpstat -P ALL 1

1.2 调整 CPU 运行模式

在高负载服务器上,建议调整 CPU 运行模式为 性能模式,提高响应速度:

cpupower frequency-set -g performance  # 设置为性能模式

1.3 限制进程 CPU 使用

如果某些进程消耗过多 CPU,可使用 cpulimit 限制:

cpulimit -p <PID> -l 50  # 限制进程最多使用 50% CPU

或者用 taskset 绑定进程到特定 CPU 核心:

taskset -c 0,1 ./myapp  # 绑定到 CPU 0 和 1

二、内存优化

2.1 监控内存使用情况

使用 free -mvmstat 观察内存占用:

free -h   # 查看内存使用
vmstat 1  # 监控 swap、cache

关键指标:

  • available:可用内存,低于 20% 可能导致 OOM
  • swap:如果 swap 使用率高,说明物理内存不足
  • buffers/cache:缓存占比高说明文件 IO 频繁

2.2 关闭不必要的服务

使用 systemctl 禁用无关的系统服务:

systemctl disable --now avahi-daemon
systemctl disable --now cups

2.3 禁用或调整 swap

对于大部分生产环境,swap 过多使用会拖慢系统响应,可适当调整:默认 swappiness 值为 60,建议改为 10 或 0,以减少不必要的 Swap 交换:

sysctl vm.swappiness=10
echo "vm.swappiness=10" >> /etc/sysctl.conf

如果物理内存充足,也可以直接禁用:

swapoff -a
sed -i '/swap/d' /etc/fstab  # 永久禁用

2.4 增加内存分配限制

调整 ulimit 限制,提高进程可用的最大文件描述符数:

ulimit -n 65535
echo "* - nofile 65535" >> /etc/security/limits.conf

三、磁盘 I/O 优化

3.1 监控 I/O 负载

使用 iostatiotop 监测磁盘 I/O:

iostat -x 1
iotop

3.2 调整 I/O 调度算法

修改磁盘调度算法(适用于 SSD):

echo "none" > /sys/block/sda/queue/scheduler

持久化设置:

echo 'GRUB_CMDLINE_LINUX="elevator=none"' >> /etc/default/grub
update-grub && reboot

3.3 启用 TRIM(适用于 SSD)

定期手动清理未使用的块:

fstrim -v /

或者启用自动 TRIM:

systemctl enable fstrim.timer

3.4 增加文件系统缓存

提高 dirty_ratio,减少磁盘写入:

sysctl -w vm.dirty_ratio=20
sysctl -w vm.dirty_background_ratio=5

持久化配置:

echo "vm.dirty_ratio=20" >> /etc/sysctl.conf
echo "vm.dirty_background_ratio=5" >> /etc/sysctl.conf

四、网络优化

4.1 监控网络流量

使用 iftopnload 监控网络:

iftop -i eth0
nload

4.2 调整 TCP 参数

优化 TCP 连接,减少 TIME_WAIT 状态:

sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w net.ipv4.tcp_tw_recycle=1
sysctl -w net.ipv4.tcp_fin_timeout=30
sysctl -w net.ipv4.tcp_keepalive_time=600
sysctl -w net.core.somaxconn=65535

持久化配置:

echo "net.ipv4.tcp_tw_reuse=1" >> /etc/sysctl.conf
echo "net.ipv4.tcp_tw_recycle=1" >> /etc/sysctl.conf
echo "net.ipv4.tcp_fin_timeout=30" >> /etc/sysctl.conf
echo "net.ipv4.tcp_keepalive_time=600" >> /etc/sysctl.conf
echo "net.core.somaxconn=65535" >> /etc/sysctl.conf
sysctl -p

4.3 调整连接追踪表大小

增加 nf_conntrack 的最大连接数,防止大流量导致丢包:

sysctl -w net.netfilter.nf_conntrack_max=524288
echo "net.netfilter.nf_conntrack_max=524288" >> /etc/sysctl.conf

五、进程与文件句柄优化

5.1 增加最大文件描述符

查看当前限制:

ulimit -n

修改 /etc/security/limits.conf

* soft nofile 65535
* hard nofile 65535

5.2 调整最大进程数

修改 /etc/security/limits.conf

* soft nproc 65535
* hard nproc 65535

5.3 限制 Zombie 进程

减少 defunct 进程数量:

echo 1 > /proc/sys/kernel/pid_max

六、系统级别优化

6.1 禁用 SELinux(若无安全需求)

setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

6.2 优化日志记录

限制日志大小:

logrotate -f /etc/logrotate.conf

6.3 关闭 IPv6(若不使用)

echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
sysctl -p

以上优化涵盖了 Linux 服务器的 CPU、内存、磁盘、网络等核心部分。实际工作中,优化应根据业务需求和硬件配置进行权衡。提升 Linux 服务器的性能和稳定性!

相关文章:

  • 【leetcode hot 100 994】腐烂的橘子
  • MongoDB 更新集合名
  • UML(统一建模语言)中总共有哪些图
  • VLLM专题(三十六)—自动前缀缓存
  • 当Anaconda的安装路径与我想创建的conda虚拟环境路径不一致时,应该怎么操作?
  • STM32-汇编
  • 【漫话机器学习系列】143.轮廓系数(Silhouette Coefficient)
  • QT 磁盘文件 教程03-创建、删除、复制文件
  • numpy学习笔记2:ones = np.ones((2, 4)) 的详解
  • PostgreSQL中array_to_string函数来将数组转换成逗号分隔的字符串
  • C#:深入理解Thread.Sleep与Task.Delay
  • 类和对象C++
  • 鸿蒙数据持久化之首选项
  • WebGL学习2
  • Echarts 折线图
  • 【Linux笔记】动态库与静态库的理解与加载
  • 《数字图像处理》第三章 灰度变换与空间滤波学习笔记(3.1-3.2)反转、对数、幂律、分段线性等变换
  • 【QT:QSS】
  • 在 MySQL 中,只写 JOIN 等价于?
  • linux 命令 mkdir
  • canvas案例网站/seo在线推广
  • 无锡网站/搜索引擎优化的意思
  • 用织梦做的网站一般后台/培训机构排名前十
  • 济南正规网站建设公司/seo发贴软件
  • 网站框架设计/seo优化服务商
  • 织梦网站后台密码错误/怎么做好网络营销