引言:为什么云服务器需要性能优化?

在天亿互联的云环境中,即使选择了高配实例,若未针对业务场景进行系统级调优,也可能出现CPU飙高、内存不足或响应延迟等问题。性能优化不是玄学,而是基于监控数据的科学调整。本文将从CPU、内存两个维度,为您提供一套可落地的优化方案,适用于Linux系统(CentOS 7/8、Ubuntu 20.04+)。

第一步:性能基线监控与瓶颈定位

优化前必须明确瓶颈所在。使用以下工具采集基线数据:

# 实时查看CPU/内存/负载
top -d 2

# 记录CPU核心使用率历史(安装sysstat后)
sar -u 1 10 > cpu_usage.log

# 查看内存详细使用
free -m && vmstat 1 5

# 定位高CPU进程(按CPU降序)
ps aux --sort=-%cpu | head -10

若发现某个用户进程长期占用超过80% CPU,则进入第二步优化;若发现swap使用频繁且内存不足,则参考第三步。

第二步:CPU性能调优实战

2.1 调整进程优先级(nice/renice)

对于非关键后台任务(如日志备份),降低其优先级可避免与核心业务抢CPU。例如将PID 1234的nice值调整为10:

# 启动时指定优先级
nice -n 10 /path/to/backup.sh

# 对运行中进程调整
renice 10 -p 1234

2.2 使用cgroups限制CPU占用

当多个业务共存时,用cgroups为每个服务设定CPU配额。以下创建名为'webapp'的组,限制其最多使用2个核心(200%):

# 创建cgroup
mkdir /sys/fs/cgroup/cpu/webapp

# 设置CPU限额(100000微秒 = 1核,200000 = 2核)
echo 200000 > /sys/fs/cgroup/cpu/webapp/cpu.cfs_quota_us
echo 100000 > /sys/fs/cgroup/cpu/webapp/cpu.cfs_period_us

# 将进程PID加入cgroup
echo 5678 > /sys/fs/cgroup/cpu/webapp/tasks

2.3 内核参数优化:调整调度器与中断亲和性

对于网络密集型应用,可设置RPS(Receive Packet Steering)分散软中断到多核。编辑/etc/sysctl.conf添加:

# 启用RPS(以eth0为例,根据CPU核心数设置bitmask,此处为4核启用全部)
echo 'f' > /sys/class/net/eth0/queues/rx-0/rps_cpus

同时修改内核调度延迟:

sysctl -w kernel.sched_min_granularity_ns=10000000
sysctl -w kernel.sched_wakeup_granularity_ns=15000000

注意:修改sysctl永久生效需写入/etc/sysctl.conf并执行sysctl -p。

第三步:内存性能调优实战

3.1 调整swappiness值减少swap使用

对于追求低延迟的应用,建议降低swappiness至10(默认60),让内存优先缓存文件,减少磁盘交换:

echo 10 > /proc/sys/vm/swappiness
# 永久生效
echo 'vm.swappiness=10' >> /etc/sysctl.conf
sysctl -p

3.2 优化页缓存与脏数据回写

调整内核参数以平衡缓存与写入性能,适合数据库等I/O密集应用:

# 延迟脏数据回写时间(单位:百分之一秒)
sysctl -w vm.dirty_writeback_centisecs=5000
# 触发回写的脏页比例
sysctl -w vm.dirty_ratio=20
sysctl -w vm.dirty_background_ratio=10

3.3 使用内存回收策略(THP)注意事项

透明大页(THP)可能增加延迟,对于实时性要求高的应用建议关闭:

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

如需永久关闭,在/etc/rc.local中添加上述命令(确保有执行权限)。

第四步:应用层优化建议

除了系统层面,还需结合应用特点:

  • 使用JVM的应用,调整堆内存大小并启用G1垃圾回收器。
  • Nginx/PHP-FPM调优worker_processes与pm.max_children。
  • 数据库调整innodb_buffer_pool_size为物理内存的70%左右。

示例:MySQL优化配置片段

[mysqld]
innodb_buffer_pool_size = 8G   # 根据内存实际调整
innodb_log_file_size = 512M
max_connections = 500

第五步:验证优化效果

优化后需重新压测对比。使用ab或wrk工具模拟压力:

# 并发100,请求10000次
yum install httpd-tools -y
ab -n 10000 -c 100 http://yourdomain.com/

观察优化前后响应时间、吞吐量及CPU/内存使用率变化。同时用top和vmstat监控是否出现新瓶颈。

总结与注意事项

性能优化是一个迭代过程,每次调整后应保留备份并记录变化。天亿互联用户可通过控制台监控面板查看实例指标,若仍无法满足需求,可考虑升级实例规格或使用负载均衡集群。请勿盲目复制参数,需结合业务类型(计算型、内存型、I/O型)调整。

如需进一步协助,欢迎提交工单联系天亿互联技术团队。