CentOS 性能调优指南
一、系统更新
在进行任何性能调优之前,确保系统是最新的,这样可以获得最新的安全补丁和性能改进。
# 更新系统软件包
sudo yum update -y
二、内核参数调优
内核参数的调整可以显著影响系统的性能,特别是在高并发场景下。编辑 /etc/sysctl.conf
文件并添加或修改以下参数:
# 允许系统使用更多的内存作为文件系统缓存
vm.dirty_ratio = 60
vm.dirty_background_ratio = 2
# 调整 TCP 相关参数以优化网络性能
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
net.core.somaxconn = 8192
# 增加文件句柄限制
fs.file-max = 65536
应用新的内核参数:
sudo sysctl -p
三、用户和进程资源限制
为了避免单个进程耗尽系统资源,需要调整用户和进程的资源限制。编辑 /etc/security/limits.conf
文件,添加以下内容:
* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536
编辑 /etc/pam.d/login
文件,确保包含以下行:
session required pam_limits.so
四、磁盘 I/O 优化
4.1 选择合适的文件系统
对于大多数场景,XFS 文件系统是一个不错的选择,它具有良好的性能和扩展性。如果需要重新格式化磁盘,可以使用以下命令:
# 卸载磁盘
sudo umount /dev/sdX
# 格式化磁盘为 XFS
sudo mkfs.xfs /dev/sdX
4.2 调整磁盘调度算法
不同的磁盘调度算法适用于不同的场景。对于 SSD 磁盘,建议使用 noop
调度算法;对于 HDD 磁盘,deadline
或 cfq
可能更合适。可以通过以下命令临时调整调度算法:
sudo echo noop > /sys/block/sdX/queue/scheduler
为了使设置永久生效,可以编辑 /etc/default/grub
文件,在 GRUB_CMDLINE_LINUX
行中添加 elevator=noop
:
GRUB_CMDLINE_LINUX="elevator=noop ..."
更新 GRUB 配置:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
五、内存管理优化
5.1 调整交换空间使用
减少系统对交换空间的依赖可以提高性能。编辑 /etc/sysctl.conf
文件,添加或修改以下参数:
vm.swappiness = 10
应用新的内核参数:
sudo sysctl -p
5.2 使用透明大页(THP)
透明大页可以减少页表项的数量,提高内存访问效率。可以通过以下命令临时禁用 THP:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
为了使设置永久生效,可以编辑 /etc/rc.local
文件,添加以下内容:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
并确保 /etc/rc.local
文件具有可执行权限:
sudo chmod +x /etc/rc.d/rc.local
六、网络优化
6.1 调整网络缓冲区大小
编辑 /etc/sysctl.conf
文件,添加或修改以下参数:
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.rmem_default = 16777216
net.core.wmem_default = 16777216
net.ipv4.tcp_rmem = "4096 87380 16777216"
net.ipv4.tcp_wmem = "4096 65536 16777216"
应用新的内核参数:
sudo sysctl -p
6.2 禁用不必要的网络服务
使用 systemctl
命令禁用不必要的网络服务,例如:
sudo systemctl disable firewalld
sudo systemctl stop firewalld
七、服务和应用程序优化
7.1 禁用不必要的系统服务
使用 systemctl
命令列出并禁用不必要的系统服务:
# 列出所有服务
sudo systemctl list-unit-files --type=service
# 禁用服务
sudo systemctl disable service_name
7.2 优化数据库服务(以 MySQL 为例)
编辑 /etc/my.cnf
文件,根据服务器的内存和负载情况调整以下参数:
[mysqld]
innodb_buffer_pool_size = 512M
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2
重启 MySQL 服务使配置生效:
sudo systemctl restart mysqld
八、监控和调优反馈
使用系统监控工具(如 top
、htop
、iostat
、vmstat
、netstat
等)定期监控系统性能,根据监控结果进一步调整系统参数。例如,使用 iostat
监控磁盘 I/O 情况:
iostat -x 1
九、CPU 性能优化
9.1 CPU 亲和性设置
对于多 CPU 或多核系统,合理设置 CPU 亲和性可以提高性能。通过将进程绑定到特定的 CPU 核心,可以减少 CPU 之间的上下文切换开销。
以 Nginx 为例,使用 taskset
命令将 Nginx 工作进程绑定到特定的 CPU 核心:
# 查找 Nginx 工作进程的 PID
ps -ef | grep nginx | grep worker
# 将 PID 为 1234 的 Nginx 工作进程绑定到 CPU 核心 0
taskset -pc 0 1234
若要让 Nginx 启动时就绑定 CPU 核心,可以修改 Nginx 配置文件 /etc/nginx/nginx.conf
,添加以下内容:
worker_processes auto;
worker_cpu_affinity auto;
9.2 调整 CPU 调度策略
根据不同的应用场景,可以调整 CPU 的调度策略。例如,对于实时性要求较高的应用,可以使用 SCHED_FIFO
或 SCHED_RR
调度策略。
使用 chrt
命令修改进程的调度策略和优先级:
# 将 PID 为 1234 的进程设置为 SCHED_FIFO 调度策略,优先级为 99
chrt -f -p 99 1234
十、日志管理优化
10.1 日志轮转
日志文件会随着时间的推移不断增大,占用大量磁盘空间。使用 logrotate
工具可以定期轮转日志文件,避免磁盘空间被占满。
编辑 /etc/logrotate.conf
文件,根据需要调整日志轮转的周期、保留数量等参数:
# 每周轮转一次日志文件
weekly
# 保留 4 周的日志文件
rotate 4
# 压缩旧的日志文件
compress
还可以为特定的应用程序创建单独的日志轮转配置文件,例如 /etc/logrotate.d/nginx
:
/var/log/nginx/*.log {
daily
missingok
rotate 52
compress
delaycompress
notifempty
create 640 nginx nginx
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
10.2 减少不必要的日志记录
在应用程序配置中,减少不必要的日志记录可以降低磁盘 I/O 开销。例如,在 Nginx 配置文件中,可以将日志级别设置为 error
或更高:
error_log /var/log/nginx/error.log error;
十一、电源管理优化
11.1 禁用不必要的电源节省模式
在服务器环境中,禁用不必要的电源节省模式可以确保系统始终以最高性能运行。编辑 /etc/default/tuned
文件,将 ACTIVE_PROFILE
设置为 performance
:
ACTIVE_PROFILE=performance
重启 tuned
服务使配置生效:
sudo systemctl restart tuned
11.2 调整 CPU 频率
使用 cpupower
工具可以调整 CPU 的频率。例如,将 CPU 频率设置为最高性能模式:
sudo cpupower frequency-set -g performance
十二、存储系统优化
12.1 RAID 配置
如果服务器使用多个磁盘,可以通过 RAID 配置提高存储性能和数据冗余。常见的 RAID 级别有 RAID 0、RAID 1、RAID 5、RAID 10 等。
以创建 RAID 1 为例,使用 mdadm
工具:
# 创建 RAID 1 阵列
sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda /dev/sdb
# 格式化 RAID 阵列
sudo mkfs.xfs /dev/md0
# 挂载 RAID 阵列
sudo mkdir /mnt/raid1
sudo mount /dev/md0 /mnt/raid1
12.2 LVM 优化
如果使用 LVM(逻辑卷管理),可以通过调整逻辑卷的条带化和镜像等参数来提高性能。例如,创建条带化的逻辑卷:
# 创建物理卷
sudo pvcreate /dev/sdc /dev/sdd
# 创建卷组
sudo vgcreate vg0 /dev/sdc /dev/sdd
# 创建条带化的逻辑卷
sudo lvcreate -L 10G -n lv0 -i 2 -I 256 vg0
# 格式化逻辑卷
sudo mkfs.xfs /dev/vg0/lv0
# 挂载逻辑卷
sudo mkdir /mnt/lv0
sudo mount /dev/vg0/lv0 /mnt/lv0
十三、安全优化对性能的影响平衡
13.1 防火墙规则优化
虽然防火墙可以提高系统的安全性,但过多或不合理的防火墙规则会影响网络性能。定期清理不必要的防火墙规则,只开放必要的端口。
使用 firewalld
管理防火墙规则:
# 查看当前防火墙规则
sudo firewall-cmd --list-all
# 开放特定端口
sudo firewall-cmd --permanent --add-port=80/tcp
# 重新加载防火墙规则
sudo firewall-cmd --reload
13.2 SELinux 策略调整
SELinux 可以增强系统的安全性,但严格的 SELinux 策略可能会影响应用程序的性能。可以根据实际情况调整 SELinux 的策略模式,例如将 SELinux 设置为宽容模式:
# 临时将 SELinux 设置为宽容模式
sudo setenforce 0
# 永久将 SELinux 设置为宽容模式
sudo sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config
评论一下?