引言:理解AlmaLinux性能优化的重要性
AlmaLinux作为一个企业级Linux发行版,作为CentOS的替代品,已经成为许多生产环境的首选操作系统。然而,仅仅安装AlmaLinux并不能保证最佳性能。通过系统性的性能优化,我们可以显著提升服务器效率,解决CPU、内存、磁盘I/O和网络等常见资源瓶颈问题。
性能优化不仅仅是技术调整,更是一个系统工程。它需要我们深入理解系统架构,识别瓶颈所在,并采用合适的工具和策略进行优化。本文将全面探讨AlmaLinux性能优化的各个方面,从基础监控到高级调优,帮助您构建高效的服务器环境。
一、性能监控与分析基础
1.1 系统性能监控工具概览
在进行任何优化之前,首先需要了解系统当前的性能状态。AlmaLinux提供了丰富的监控工具,帮助我们收集和分析性能数据。
常用监控工具及其用途:
# 1. top - 实时进程监控
top
# 2. htop - 增强版top,提供更友好的界面
sudo dnf install htop -y
htop
# 3. vmstat - 虚拟内存统计
vmstat 1 5 # 每秒输出一次,共5次
# 4. iostat - 磁盘I/O统计
sudo dnf install sysstat -y
iostat -x 1 5 # 显示扩展统计信息
# 5. netstat/ss - 网络连接统计
ss -tuln # 显示所有监听端口
netstat -s # 显示网络统计信息
# 6. pidstat - 进程级统计
sudo dnf install sysstat -y
pidstat -u 1 5 # CPU使用情况
使用sysstat收集历史数据:
# 安装并启用sysstat
sudo dnf install sysstat -y
sudo systemctl enable --now sysstat
# sysstat配置文件位于/etc/sysconfig/sysstat
# 可以调整收集间隔和保留天数
# 查看历史数据
sar -u # CPU历史数据
sar -r # 内存历史数据
sar -d # 磁盘历史数据
1.2 使用perf进行性能分析
perf是Linux内核自带的性能分析工具,可以深入分析CPU性能事件。
# 安装perf
sudo dnf install perf -y
# 记录系统范围的性能数据(30秒)
perf record -a -g sleep 30
# 生成报告
perf report
# 分析特定进程的CPU使用情况
perf top -p <PID>
# 追踪系统调用
perf trace -p <PID> -- sleep 10
1.3 使用Prometheus + Grafana构建监控系统
对于生产环境,建议使用专业的监控系统:
# 安装Prometheus
sudo useradd --no-create-home --shell /bin/false prometheus
sudo mkdir /etc/prometheus /var/lib/prometheus
sudo chown prometheus:prometheus /etc/prometheus /var/lib/prometheus
# 下载Prometheus
cd /tmp
wget https://github.com/prometheus/prometheus/releases/download/v2.45.0/prometheus-2.45.0.linux-amd64.tar.gz
tar xvf prometheus-*.tar.gz
sudo cp prometheus-*/prometheus /usr/local/bin/
sudo cp prometheus-*/promtool /usr/local/bin/
sudo chown prometheus:prometheus /usr/local/bin/prometheus /usr/local/bin/promtool
# 配置Prometheus
sudo nano /etc/prometheus/prometheus.yml
Prometheus配置示例:
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['localhost:9100']
二、CPU性能优化策略
2.1 CPU调度器优化
AlmaLinux默认使用CFS(完全公平调度器),但根据应用场景不同,可能需要调整。
查看当前调度器:
# 查看所有CPU调度器
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
# 查看可用调度器
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
调整CPU调度器:
# 安装cpupower工具
sudo dnf install kernel-tools -y
# 设置为performance模式(适合生产服务器)
sudo cpupower frequency-set -g performance
# 永久生效配置
sudo nano /etc/sysconfig/cpupower
配置文件内容:
# /etc/sysconfig/cpupower
governor="performance"
min_freq="800MHz"
max_freq="3.2GHz"
启用并配置cpupower服务:
sudo systemctl enable cpupower
sudo systemctl start cpupower
2.2 CPU亲和性(Affinity)优化
通过设置CPU亲和性,可以将进程绑定到特定CPU核心,减少上下文切换。
# 查看进程的CPU亲和性
taskset -p <PID>
# 设置进程的CPU亲和性(绑定到CPU 0和1)
taskset -cp 0,1 <PID>
# 启动新进程并绑定到特定CPU
taskset -c 0,1 /path/to/your/application
# 使用numactl进行更精细的控制
sudo dnf install numactl -y
# 查看NUMA拓扑
numactl --hardware
# 在特定NUMA节点上运行程序
numactl --cpunodebind=0 --membind=0 /path/to/your/application
2.3 中断亲和性优化
对于高网络吞吐量的服务器,优化中断处理可以显著提升性能。
# 查看当前中断分布
cat /proc/interrupts
# 安装irqbalance(自动优化中断分配)
sudo dnf install irqbalance -y
sudo systemctl enable --now irqbalance
# 手动设置中断亲和性
# 查看特定中断的亲和性
cat /proc/irq/<IRQ_NUMBER>/smp_affinity
# 设置中断亲和性(十六进制表示,每位代表一个CPU)
echo 3 > /proc/irq/<IRQ_NUMBER>/smp_affinity # 绑定到CPU0和CPU1
网络中断优化脚本示例:
#!/bin/bash
# network_irq_affinity.sh
# 获取网络接口的中断号
INTERFACE="eth0"
IRQ_LIST=$(grep $INTERFACE /proc/interrupts | awk '{print $1}' | sed 's/://')
# 获取CPU核心数
CPU_COUNT=$(nproc)
# 计算亲和性掩码
if [ $CPU_COUNT -le 8 ]; then
AFFINITY_MASK=$(printf "%x" $(( (1 << CPU_COUNT) - 1 )))
else
AFFINITY_MASK="ff"
fi
# 设置每个中断的亲和性
for IRQ in $IRQ_LIST; do
echo $AFFINITY_MASK > /proc/irq/$IRQ/smp_affinity
echo "Set IRQ $IRQ affinity to $AFFINITY_MASK"
done
2.4 编译优化参数
对于需要从源代码编译的应用程序,使用合适的编译参数可以提升性能:
# 安装开发工具
sudo dnf groupinstall "Development Tools" -y
# 使用-O2优化级别(推荐用于生产环境)
gcc -O2 -march=native -mtune=native -o myapp myapp.c
# 使用-O3(激进优化,可能增加二进制大小)
gcc -O3 -march=native -mtune=native -o myapp myapp.c
# 使用Profile-Guided Optimization (PGO)
# 第一步:编译并收集性能数据
gcc -fprofile-generate -O2 -o myapp myapp.c
./myapp # 运行典型工作负载
# 第二步:使用收集的数据重新编译
gcc -fprofile-use -O2 -o myapp myapp.c
三、内存管理优化
3.1 调整Swappiness参数
Swappiness控制系统使用交换空间的倾向性。对于服务器,通常需要降低这个值。
# 查看当前swappiness值
cat /proc/sys/vm/swappiness
# 临时调整(重启后失效)
sudo sysctl vm.swappiness=10
# 永久调整
sudo nano /etc/sysctl.conf
# 添加以下行
vm.swappiness=10
# 应用更改
sudo sysctl -p
3.2 优化内存分配策略
Transparent Huge Pages (THP)优化:
# 查看THP状态
cat /sys/kernel/mm/transparent_hugepage/enabled
# 临时禁用THP(对于某些数据库应用推荐)
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
# 永久禁用
sudo nano /etc/rc.local
# 添加以下内容
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
# 或者创建systemd服务
sudo nano /etc/systemd/system/disable-thp.service
服务文件内容:
[Unit]
Description=Disable Transparent Huge Pages
After=network.target
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo never > /sys/kernel/mm/transparent_hugepage/enabled'
ExecStart=/bin/sh -c 'echo never > //sys/kernel/mm/transparent_hugepage/defrag'
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
调整内存过量使用:
# 允许内存过量使用(适合虚拟化环境)
sudo sysctl vm.overcommit_memory=1
# 永久设置
echo "vm.overcommit_memory=1" >> /etc/sysctl.conf
3.3 优化Buffer和Cache
# 查看当前内存使用情况
free -h
# 调整vfs_cache_pressure(控制内核回收目录项和inode缓存的倾向)
# 默认值100,降低值可以保留更多缓存
sudo sysctl vm.vfs_cache_pressure=50
# 永久设置
echo "vm.vfs_cache_pressure=50" >> /etc/sysctl.conf
# 调整dirty_ratio和dirty_background_ratio
# 控制脏页写回策略
sudo sysctl vm.dirty_ratio=15
sudo sysctl vm.dirty_background_ratio=5
# 永久设置
echo "vm.dirty_ratio=15" >> /etc/sysctl.conf
echo "vm.dirty_background_ratio=5" >> /etc/sysctl.conf
3.4 使用zram作为交换空间
对于内存有限的系统,可以使用zram提供压缩的内存交换:
# 安装zram-generator
sudo dnf install zram-generator -y
# 配置zram
sudo nano /etc/systemd/zram-generator.conf
配置文件内容:
[zram0]
zram-size = min(ram / 2, 4096)
compression-algorithm = zstd
启用并启动:
sudo systemctl enable --now systemd-zram-setup@zram0.service
四、磁盘I/O优化
4.1 I/O调度器优化
不同的I/O调度器适用于不同的工作负载:
# 查看可用调度器
cat /sys/block/sda/queue/scheduler
# 查看当前调度器
cat /sys/block/sda/queue/scheduler
# 临时更改调度器
echo deadline > /sys/block/sda/queue/scheduler # 适合数据库
# 或者
echo noop > /sys/block/sda/queue/scheduler # 适合SSD
# 永久更改(使用udev规则)
sudo nano /etc/udev/rules.d/60-ioscheduler.rules
udev规则内容:
# 为SSD设置noop调度器
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="noop"
# 为HDD设置deadline调度器
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="deadline"
4.2 文件系统优化
EXT4文件系统优化:
# 创建优化的EXT4文件系统
# -m 1: 保留1%的空间给root用户(默认5%)
# -O extent,uninit_bg,dir_index,filetype: 启用优化特性
# -T largefile: 针对大文件优化inode比例
sudo mkfs.ext4 -m 1 -O extent,uninit_bg,dir_index,filetype -T largefile /dev/sdb1
# 挂载选项优化
# 编辑/etc/fstab
sudo nano /etc/fstab
优化的fstab条目:
/dev/sdb1 /data ext4 defaults,noatime,nodiratime,data=writeback,barrier=0 0 2
选项说明:
noatime: 不更新访问时间,减少写操作nodiratime: 不更新目录访问时间data=writeback: 提高写入性能(可能降低数据安全性)barrier=0: 禁用写屏障(仅在UPS保护下使用)
XFS文件系统优化:
# 创建XFS文件系统
sudo mkfs.xfs -f -i size=512 -l size=128m,lazy-count=1 /dev/sdb1
# 挂载选项
/dev/sdb1 /data xfs defaults,noatime,nodiratime,logbufs=8,logbsize=256k 0 2
4.3 RAID优化
对于硬件RAID,确保安装了适当的管理工具:
# 安装MegaRAID管理工具(LSI/Avago控制器)
sudo dnf install megacli -y
# 查看RAID状态
MegaCLI -LDInfo -Lall -aALL
# 调整RAID缓存策略
MegaCLI -SetCachedPd -Enable -aALL
MegaCLI -CachedPd -Enable -WT -Direct -aALL
4.4 使用LVM进行灵活的存储管理
# 创建物理卷
sudo pvcreate /dev/sdb
# 创建卷组
sudo vgcreate vg_data /dev/sdb
# 创建逻辑卷
sudo lvcreate -L 500G -n lv_data vg_data
# 格式化并挂载
sudo mkfs.ext4 /dev/vg_data/lv_data
sudo mkdir /data
sudo mount /dev/vg_data/lv_data /data
# 扩展逻辑卷(在线扩展)
sudo lvextend -L +100G /dev/vg_data/lv_data
sudo resize2fs /dev/vg_data/lv_data
五、网络性能优化
5.1 内核网络参数调优
编辑/etc/sysctl.conf进行网络优化:
sudo nano /etc/sysctl.conf
添加以下优化参数:
# 网络性能优化参数
# 增加TCP最大连接数
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
# 增加接收缓冲区大小
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
# 增加连接跟踪表大小(用于防火墙)
net.netfilter.nf_conntrack_max = 2000000
# TCP优化参数
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0 # 在NAT环境下可能导致问题,建议关闭
net.ipv4.tcp_syncookies = 1
# 增加端口范围
net.ipv4.ip_local_port_range = 1024 65535
# 网络设备队列长度
net.core.netdev_max_backlog = 5000
# 启用TCP窗口缩放
net.ipv4.tcp_window_scaling = 1
# 启用TCP时间戳
net.ipv4.tcp_timestamps = 1
# 启用TCP SACK(选择性确认)
net.ipv4.tcp_sack = 1
# 减少TCP重试次数
net.ipv4.tcp_retries2 = 5
应用更改:
sudo sysctl -p
5.2 网络接口优化
调整网卡队列大小:
# 查看当前队列大小
ethtool -l eth0
# 设置队列大小(需要网卡支持)
sudo ethtool -L eth0 combined 8
# 查看/设置接收缓冲区大小
ethtool -g eth0
sudo ethtool -G eth0 rx 4096 tx 4096
# 启用网卡卸载功能
sudo ethtool -K eth0 tso on gso on gro on lro on
# 查看当前设置
ethtool -k eth0
使用irqbalance优化网络中断:
# 安装irqbalance
sudo dnf install irqbalance -y
# 配置irqbalance
sudo nano /etc/sysconfig/irqbalance
配置内容:
# 启用irqbalance
IRQBALANCE_ARGS="--powerthresh=1 --deepthresh=1"
5.3 网络流量控制(Traffic Control)
对于需要限制或优先处理网络流量的场景:
# 安装tc工具(通常已安装)
sudo dnf install iproute-tc -y
# 示例:限制eth0的上传速度为100Mbps
sudo tc qdisc add dev eth0 root tbf rate 100mbit burst 32kbit latency 400ms
# 示例:为特定端口设置优先级
sudo tc qdisc add dev eth0 root handle 1: prio
sudo tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip dport 80 0xffff flowid 1:1
# 查看tc规则
tc qdisc show dev eth0
tc filter show dev eth0
5.4 使用多队列网卡(RSS)
对于支持RSS(Receive Side Scaling)的网卡:
# 查看RSS配置
ethtool -x eth0
# 设置RSS队列
sudo ethtool -L eth0 combined 8
# 验证设置
ethtool -x eth0
六、应用层优化策略
6.1 Web服务器优化(Nginx)
Nginx配置优化:
# /etc/nginx/nginx.conf
user nginx;
worker_processes auto; # 自动设置为CPU核心数
worker_rlimit_nofile 65535; # 工作进程打开文件限制
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 4096; # 每个工作进程的最大连接数
use epoll; # 使用epoll事件模型
multi_accept on; # 一次性接受所有连接
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
# 日志格式优化
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" '
'rt=$request_time uct="$upstream_connect_time" '
'uht="$upstream_header_time" urt="$upstream_response_time"';
access_log /var/log/nginx/access.log main;
# 性能优化
sendfile on; # 启用sendfile
tcp_nopush on; # 启用TCP_CORK
tcp_nodelay on; # 禁用Nagle算法
keepalive_timeout 65; # 保持连接超时
keepalive_requests 100; # 单个连接的最大请求数
# 缓冲区优化
client_body_buffer_size 128k;
client_max_body_size 10m;
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;
output_buffers 1 32k;
postpone_output 1460;
# Gzip压缩
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_proxied any;
gzip_comp_level 6;
gzip_types
text/plain
text/css
text/xml
text/javascript
application/javascript
application/xml+rss
application/json;
# 缓存配置
open_file_cache max=10000 inactive=30s;
open_file_cache_valid 60s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
# 包含其他配置
include /etc/nginx/conf.d/*.conf;
}
Nginx工作进程优化:
# 在/etc/nginx/nginx.conf中设置
worker_processes auto; # 自动检测CPU核心数
worker_cpu_affinity auto; # 自动绑定CPU亲和性
# 或者手动指定
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
6.2 数据库优化(MySQL/MariaDB)
MySQL/MariaDB配置优化:
# /etc/my.cnf.d/server.cnf
[mysqld]
# 基础配置
user = mysql
datadir = /var/lib/mysql
socket = /var/run/mysqld/mysqld.sock
pid-file = /var/run/mysqld/mysqld.pid
# 连接优化
max_connections = 500
max_connect_errors = 100
connect_timeout = 10
wait_timeout = 600
interactive_timeout = 600
# 缓冲区和缓存优化
innodb_buffer_pool_size = 4G # 设置为可用内存的50-70%
innodb_buffer_pool_instances = 8 # 缓冲池实例数
innodb_log_file_size = 512M
innodb_log_buffer_size = 64M
innodb_flush_log_at_trx_commit = 2 # 平衡性能和数据安全
innodb_flush_method = O_DIRECT # 绕过操作系统缓存
# 查询缓存(MySQL 5.7及以下)
query_cache_type = 1
query_cache_size = 128M
query_cache_limit = 2M
# 临时表优化
tmp_table_size = 256M
max_heap_table_size = 256M
# 排序和连接优化
sort_buffer_size = 4M
join_buffer_size = 4M
# 日志优化
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
# 文件限制
open_files_limit = 65535
# InnoDB额外优化
innodb_file_per_table = 1
innodb_flush_neighbors = 0 # SSD优化
innodb_read_io_threads = 8
innodb_write_io_threads = 8
innodb_io_capacity = 2000 # SSD优化
innodb_io_capacity_max = 4000 # SSD优化
使用MySQLTuner进行优化建议:
# 下载MySQLTuner
sudo dnf install perl-DBI perl-DBD-MySQL -y
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl
chmod +x mysqltuner.pl
# 运行分析
./mysqltuner.pl --user root --pass your_password
6.3 应用程序编译优化
使用特定编译标志优化应用程序:
# 通用优化标志
export CFLAGS="-O2 -march=native -mtune=native -pipe"
export CXXFLAGS="-O2 -march=native -mtune=native -pipe"
# 对于支持LTO(链接时优化)的编译器
export CFLAGS="$CFLAGS -flto"
export CXXFLAGS="$CXXFLAGS -flto"
export LDFLAGS="$LDFLAGS -flto"
# 编译示例
./configure --prefix=/usr/local/myapp CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS"
make -j$(nproc)
sudo make install
七、系统级优化配置
7.1 调整系统限制
文件描述符限制:
# 查看当前限制
ulimit -n
# 临时设置
ulimit -n 65535
# 永久设置
sudo nano /etc/security/limits.conf
添加以下内容:
* soft nofile 65535
* hard nofile 65535
root soft nofile 65535
root hard nofile 65535
进程和内存限制:
# 在limits.conf中添加
* soft nproc 65535
* hard nproc 65535
* soft memlock unlimited
* hard memlock unlimited
7.2 调整systemd服务限制
对于systemd管理的服务,需要单独设置限制:
# 编辑服务配置
sudo systemctl edit <service-name>
# 添加以下内容
[Service]
LimitNOFILE=65535
LimitNPROC=65535
LimitMEMLOCK=infinity
7.3 调整内核参数
优化内核参数:
sudo nano /etc/sysctl.conf
添加以下参数:
# 内核优化参数
# 减少交换倾向
vm.swappiness=10
# 优化内存管理
vm.vfs_cache_pressure=50
vm.dirty_ratio=15
vm.dirty_background_ratio=5
# 优化网络
net.core.somaxconn=65535
net.ipv4.tcp_max_syn_backlog=65535
net.core.rmem_max=16777216
net.core.wmem_max=16777216
# 优化进程调度
kernel.sched_migration_cost_ns=5000000
kernel.sched_autogroup_enabled=0
# 优化文件系统
fs.file-max=2097152
fs.nr_open=2097152
# 优化信号量
kernel.sem=250 32000 100 128
应用更改:
sudo sysctl -p
7.4 使用tuned进行自动优化
tuned是Red Hat系的性能调优工具:
# 安装tuned
sudo dnf install tuned -y
# 启动并启用服务
sudo systemctl enable --now tuned
# 查看可用配置文件
tuned-adm list
# 推荐配置
tuned-adm recommend
# 应用配置(例如虚拟机)
tuned-adm profile virtual-guest
# 应用配置(例如数据库服务器)
tuned-adm profile throughput-performance
# 自定义配置
sudo mkdir /etc/tuned/custom-profile
sudo nano /etc/tuned/custom-profile/tuned.conf
自定义配置文件:
[main]
include=throughput-performance
[cpu]
governor=performance
energy_perf_bias=performance
min_perf_pct=100
[vm]
swappiness=10
transparent_hugepages=never
[sysctl]
net.core.somaxconn=65535
net.ipv4.tcp_max_syn_backlog=65535
应用自定义配置:
tuned-adm profile custom-profile
八、容器和虚拟化优化
8.1 Docker容器优化
Docker守护进程优化:
# 编辑Docker配置
sudo nano /etc/docker/daemon.json
添加以下配置:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
],
"default-ulimits": {
"nofile": {
"Name": "nofile",
"Hard": 65535,
"Soft": 65535
}
},
"exec-opts": ["native.cgroupdriver=systemd"],
"live-restore": true,
"max-concurrent-downloads": 3,
"max-concurrent-uploads": 3
}
重启Docker:
sudo systemctl restart docker
容器运行时优化:
# 运行优化的容器
docker run -d \
--name myapp \
--restart unless-stopped \
--memory="4g" \
--memory-swap="4g" \
--cpus="2.0" \
--ulimit nofile=65535:65535 \
--log-opt max-size=10m \
--log-opt max-file=3 \
myapp:latest
8.2 Kubernetes优化
Kubelet配置优化:
# 编辑kubelet配置
sudo nano /etc/sysconfig/kubelet
添加优化参数:
KUBELET_EXTRA_ARGS="--max-pods=110 --kube-reserved=cpu=500m,memory=1Gi --system-reserved=cpu=500m,memory=1Gi --eviction-hard=nodefs.available<10%,nodefs.inodesFree<5%,memory.available<500Mi"
Pod资源优化:
# 示例Pod配置
apiVersion: v1
kind: Pod
metadata:
name: optimized-app
spec:
containers:
- name: app
image: myapp:latest
resources:
requests:
memory: "512Mi"
cpu: "500m"
limits:
memory: "1Gi"
cpu: "1000m"
securityContext:
runAsNonRoot: true
runAsUser: 1000
capabilities:
drop:
- ALL
nodeSelector:
workload: "high-performance"
tolerations:
- key: "high-performance"
operator: "Equal"
value: "true"
effect: "NoSchedule"
8.3 虚拟化优化(KVM)
KVM主机优化:
# 编辑GRUB配置
sudo nano /etc/default/grub
添加以下参数:
GRUB_CMDLINE_LINUX_DEFAULT="... intel_iommu=on iommu=pt hugepages=1024"
更新GRUB并重启:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
sudo reboot
配置大页内存:
# 配置大页内存数量
echo 1024 > /proc/sys/vm/nr_hugepages
# 永久配置
echo "vm.nr_hugepages=1024" >> /etc/sysctl.conf
# 查看大页内存使用情况
cat /proc/meminfo | grep Huge
优化虚拟机配置:
# 创建优化的虚拟机
virt-install \
--name=optimized-vm \
--ram=8192 \
--vcpus=4 \
--cpu host-passthrough \
--disk path=/var/lib/libvirt/images/optimized-vm.qcow2,size=100 \
--network bridge=virbr0,model=virtio \
--graphics none \
--os-variant=centos7 \
--import \
--features kvm_hidden=on \
--controller type=scsi,model=virtio-scsi
九、性能测试与验证
9.1 CPU性能测试
使用sysbench进行CPU测试:
# 安装sysbench
sudo dnf install sysbench -y
# CPU测试(计算素数)
sysbench cpu --cpu-max-prime=20000 run
# 多线程测试
sysbench cpu --cpu-max-prime=20000 --threads=8 run
使用stress进行压力测试:
# 安装stress
sudo dnf install stress -y
# CPU压力测试
stress --cpu 8 --timeout 60s
# 内存压力测试
stress --vm 4 --vm-bytes 1G --timeout 60s
9.2 磁盘I/O测试
使用fio进行磁盘测试:
# 安装fio
sudo dnf install fio -y
# 随机读测试
fio --name=randread --ioengine=libaio --iodepth=64 --rw=randread --bs=4k --size=1G --numjobs=8 --runtime=300 --group_reporting --filename=/data/testfile
# 随机写测试
fio --name=randwrite --ioengine=libaio --iodepth=64 --rw=randwrite --bs=4k --size=1G --numjobs=8 --runtime=300 --group_reporting --filename=/data/testfile
# 混合读写测试
fio --name=randrw --ioengine=libaio --iodepth=64 --rw=randrw --bs=4k --size=1G --numjobs=8 --runtime=300 --group_reporting --rwmixread=70 --filename=/data/testfile
使用bonnie++进行综合测试:
# 安装bonnie++
sudo dnf install bonnie++ -y
# 运行测试
bonnie++ -d /data -u root -r 8192 -m 8192 -f 10 -n 100
9.3 网络性能测试
使用iperf3进行网络测试:
# 安装iperf3
sudo dnf install iperf3 -y
# 服务器端
iperf3 -s
# 客户端
iperf3 -c <server_ip> -t 60 -P 8
# UDP测试
iperf3 -s -u
iperf3 -c <server_ip> -u -b 1G -t 60
使用ab进行HTTP压力测试:
# 安装ab(Apache Bench)
sudo dnf install httpd-tools -y
# 测试
ab -n 10000 -c 100 -k http://localhost/
9.4 综合性能监控
使用nmon进行综合监控:
# 安装nmon
sudo dnf install nmon -y
# 运行监控
nmon
# 后台记录数据
nmon -f -s 30 -c 288 # 每30秒记录一次,记录288次(24小时)
使用atop进行进程级监控:
# 安装atop
sudo dnf install atop -y
# 运行atop
atop
# 启用日志记录
sudo systemctl enable atop
sudo systemctl start atop
十、持续优化与维护
10.1 建立性能基线
# 创建性能基线脚本
sudo nano /usr/local/bin/performance_baseline.sh
脚本内容:
#!/bin/bash
# performance_baseline.sh
DATE=$(date +%Y%m%d_%H%M%S)
BASELINE_DIR="/var/log/performance/baseline"
mkdir -p $BASELINE_DIR
# CPU信息
lscpu > $BASELINE_DIR/cpu_info_$DATE.txt
# 内存信息
free -h > $BASELINE_DIR/memory_info_$DATE.txt
cat /proc/meminfo > $BASELINE_DIR/meminfo_$DATE.txt
# 磁盘信息
lsblk > $BASELINE_DIR/disk_info_$DATE.txt
df -h > $BASELINE_DIR/df_info_$DATE.txt
# 网络信息
ip addr > $BASELINE_DIR/network_info_$DATE.txt
ss -tuln > $BASELINE_DIR/network_connections_$DATE.txt
# 系统负载
uptime > $BASELINE_DIR/uptime_$DATE.txt
cat /proc/loadavg > $BASELINE_DIR/loadavg_$DATE.txt
# 性能数据
vmstat 1 5 > $BASELINE_DIR/vmstat_$DATE.txt
iostat -x 1 5 > $BASELINE_DIR/iostat_$DATE.txt
mpstat -P ALL 1 5 > $BASELINE_DIR/mpstat_$DATE.txt
echo "Performance baseline saved to $BASELINE_DIR"
设置定时任务:
sudo chmod +x /usr/local/bin/performance_baseline.sh
sudo crontab -e
# 添加以下行
0 2 * * * /usr/local/bin/performance_baseline.sh
10.2 自动化监控告警
使用Prometheus + Alertmanager设置告警:
# 安装Alertmanager
sudo useradd --no-create-home --shell /bin/false alertmanager
sudo mkdir /etc/alertmanager /var/lib/alertmanager
sudo chown alertmanager:alertmanager /etc/alertmanager /var/lib/alertmanager
# 下载Alertmanager
cd /tmp
wget https://github.com/prometheus/alertmanager/releases/download/v0.26.0/alertmanager-0.26.0.linux-amd64.tar.gz
tar xvf alertmanager-*.tar.gz
sudo cp alertmanager-*/alertmanager /usr/local/bin/
sudo cp alertmanager-*/amtool /usr/local/bin/
sudo chown alertmanager:alertmanager /usr/local/bin/alertmanager /usr/local/bin/amtool
# 配置Alertmanager
sudo nano /etc/alertmanager/alertmanager.yml
配置文件内容:
global:
smtp_smarthost: 'smtp.example.com:587'
smtp_from: 'alerts@example.com'
smtp_auth_username: 'alerts@example.com'
smtp_auth_password: 'password'
route:
group_by: ['alertname']
group_wait: 10s
group_interval: 10s
repeat_interval: 1h
receiver: 'email-notifications'
receivers:
- name: 'email-notifications'
email_configs:
- to: 'admin@example.com'
subject: 'ALERT: {{ .GroupLabels.alertname }}'
body: |
{{ range .Alerts }}
Alert: {{ .Annotations.summary }}
Description: {{ .Annotations.description }}
Labels: {{ .Labels }}
{{ end }}
10.3 定期维护任务
# 创建维护脚本
sudo nano /usr/local/bin/system_maintenance.sh
脚本内容:
#!/bin/bash
# system_maintenance.sh
# 清理旧日志
find /var/log -name "*.log" -mtime +30 -exec gzip {} \;
find /var/log -name "*.gz" -mtime +90 -delete
# 清理临时文件
find /tmp -type f -atime +7 -delete
find /var/tmp -type f -atime +30 -delete
# 清理包管理器缓存
dnf clean all
# 检查磁盘空间
df -h | awk '$5 > 80 {print $0}'
# 检查系统负载
uptime
# 检查内存使用
free -h
# 检查失败的服务
systemctl --failed
echo "Maintenance completed at $(date)"
设置定期执行:
sudo chmod +x /usr/local/bin/system_maintenance.sh
sudo crontab -e
# 添加以下行
0 3 * * 0 /usr/local/bin/system_maintenance.sh
结论
AlmaLinux性能优化是一个持续的过程,需要根据具体的应用场景和工作负载进行调整。通过本文介绍的策略和工具,您可以系统性地识别和解决性能瓶颈,提升服务器效率。
记住以下关键原则:
- 监控先行:在优化之前,先建立性能基线,持续监控系统状态
- 针对性优化:根据应用类型选择合适的优化策略
- 测试验证:每次优化后都要进行测试,确保效果
- 文档记录:记录所有优化配置,便于维护和故障排查
- 持续改进:性能优化是一个持续的过程,需要定期评估和调整
通过合理应用这些优化策略,您的AlmaLinux服务器将能够更好地处理高负载场景,提供更稳定、更高效的服务。
