评估是性能调优的第一步,先建立基线并持续监控。常用工具包括:top/htop(CPU/进程视图)、vmstat(内存/IO/上下文切换)、iostat(磁盘吞吐与延迟)、sar(历史指标)、free(内存)、smartctl(磁盘健康)、iperf3(网络带宽)、ethtool(网卡统计)和 fio(存储基准)。
检测步骤建议:1)记录空载与业务峰值下的CPU、内存、磁盘I/O、网络延迟与丢包;2)用负载型bench(fio、sysbench、wrk)模拟真实读写与请求;3)对可疑资源启用更细粒度采样(perf、blktrace、tcpdump);4)输出报告用于对比调优前后效果。
用长期监控(Prometheus+Grafana、Zabbix)保存时序数据,便于发现周期性峰值或内存泄漏等问题。记录硬件详情:CPU型号/核数、内存总量/频率、磁盘类型(SSD/NVMe/HDD)、RAID配置和网卡速率。
在柬埔寨机房可能存在链路波动或带宽上游限制,网络评估需在不同时段多次测试以避免误判。
CPU调优包括合理分配核、减少上下文切换与中断干扰。常见做法:启用或调整 CPU pinning/affinity、使用isolcpus或cset工具隔离关键服务核、配置irqaffinity或使用irqbalance、关闭不必要的省电模式并选择合适的CPU governor。
调整内核参数:降低vm.swappiness(例如10或0)以减少不必要的交换;设置vm.dirty_ratio和vm.dirty_background_ratio控制写回行为;在内存充足时启用或调整HugeTLB/Transparent HugePages以降低TLB开销;为数据库分配充足的缓冲池(见下文)。
临时调参:echo 10 > /proc/sys/vm/swappiness;持久化写入 /etc/sysctl.conf 或 /etc/sysctl.d/。
调节内核参数前备份现有配置,逐项调整并观察指标,避免一次性改动过多导致系统不稳定。
存储是影响整体性能的关键。首先根据负载选择介质:随机小IO优先NVMe/SSD,顺序大吞吐可使用HDD或多盘RAID。文件系统上,XFS对大并发吞吐表现好,ext4在兼容性上稳健。挂载选项如noatime/nodiratime可减少元数据写入。
对于NVMe/SSD,将I/O调度器设置为mq-deadline或none可以降低延迟;传统HDD上noop或deadline更合适。RAID选择视读写比例:RAID10提供良好读写和冗余,RAID0虽性能高但无冗余,生产环境慎用。
使用fio设计与业务相近的读写模式(随机/顺序、不同IO大小、并发数)来验证改动效果,结合iostat或blktrace观察延迟与队列深度。
对SSD定期启用TRIM(fstrim)并监控SMART指标,避免因设备老化造成性能退化。
网络优化从物理链路、网卡配置到内核TCP参数全覆盖。首先确保机房提供的带宽和链路质量满足需求,使用链路聚合(bond)提升带宽与冗余。对网卡使用ethtool开启或关闭offload(GRO/TSO/UFO)以适应高并发或低延迟场景。
通过设置IRQ亲和性或启用RSS/RPS/XPS把网络处理分散到多个CPU核,避免单核成为瓶颈。对于高包率场景,合理配置中断绑定和网卡队列数。
调整net.core和net.ipv4参数如rmem_max/wmem_max/tcp_max_syn_backlog/tcp_tw_reuse以提升并发连接处理能力,视业务(短连接HTTP或长连接WebSocket)进行针对性调优。
使用iperf3、netstat、ss、tcpdump和iftop等工具定位吞吐、连接数和包丢失源。
应用层调优要结合硬件与业务。数据库方面:MySQL/InnoDB应将innodb_buffer_pool_size设置为物理内存的60%-80%(视并发与缓存需求);调整innodb_io_capacity、log_file_size和适当的连接池限制;PostgreSQL调整shared_buffers与work_mem。
部署Redis或Memcached减轻数据库压力,合理设置maxmemory与淘汰策略。Nginx作为反向代理或静态服务时,设置 worker_processes 为 auto(或核数),配置 worker_cpu_affinity、sendfile、tcp_nopush 与 tcp_nodelay 提升吞吐与延迟表现。
若在容器或虚拟机中运行,避免过度资源超配,使用cgroups限制并保证关键服务独占足够CPU/内存。对数据库与高性能服务考虑启用HugePages或直通设备(SR-IOV、PCI passthrough)。
每次在应用层改动后用压力测试工具(sysbench、wrk、pgbench)验证端到端性能,并结合监控查看是否出现新的瓶颈(如网络或I/O反压)。