服务器性能优化:老司机手把手教你榨干机器性能


服务器性能差?网站卡、数据库慢、CPU跑满?这篇从真实生产环境总结的调优指南,覆盖CPU、内存、磁盘IO、Nginx、MySQL等核心优化,实测有效。

<!DOCTYPE html>

服务器性能优化:老司机手把手教你榨干机器性能

一、先看监控,别盲猜

做运维这几年,见过太多服务器"带不动"的情况——网站卡、数据库慢、CPU动不动就跑满。其实很多时候不是硬件不行,是没调好。今天把我这些年沉淀下来的实战优化经验整理出来,覆盖Linux系统层面、Web服务、数据库和缓存四大块,保证全是真实生产环境验证过的招。

动手之前先搞清楚瓶颈在哪。上来就改内核参数属于瞎干。

用top和htop看CPU占用:

top -c
htop

按M按内存占用排序,按P按CPU排序,几秒钟就能定位哪个进程在搞事。

用iostat看磁盘IO:

iostat -x 1 5

重点看%util列,如果长期超过80%,说明磁盘是瓶颈。

用sar看历史资源:

sar -u 1 3      # CPU
sar -r 1 3      # 内存
sar -b 1 3      # 磁盘IO

这套组合拳打下来,哪里有病心里就有数了。

二、Linux内核参数调优

有些参数默认值对服务器来说太保守了,调大了能显著提升性能。

文件描述符限制必须调: Linux默认单进程只能开1024个文件描述符,跑高并发服务根本不够用。

# 查看当前限制
ulimit -n

# 临时生效(重启失效)
ulimit -n 65535

# 永久生效,编辑 /etc/security/limits.conf
vim /etc/security/limits.conf
# 加入以下内容
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535

TCP连接参数优化: 处理高并发TCP连接时,这几个内核参数必须调。

# 编辑 sysctl.conf
vim /etc/sysctl.conf

# 写入以下配置
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15
net.ipv4.ip_local_port_range = 1024 65535
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
net.ipv4.tcp_fastopen = 3

# 使配置生效
sysctl -p

亲身经历:之前有个API服务经常报"too many open files",改了ulimit和sysctl.conf之后直接满血复活。

三、Nginx性能优化实战

Nginx是Linux服务器上最常见的Web服务端,把这几个地方调好,性能能翻倍。

vim /etc/nginx/nginx.conf

worker_processes auto;
worker_cpu_affinity auto;

events {
    worker_connections 65535;
    use epoll;
    multi_accept on;
}

开启Gzip压缩:

gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_min_length 1024;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

静态资源缓存:

location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff|woff2)$ {
    expires 30d;
    add_header Cache-Control "public, no-transform";
    access_log off;
}

四、MySQL数据库优化

开启慢查询日志:

slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1

用explain分析慢查询:

EXPLAIN SELECT u.username, o.order_id 
FROM users u 
LEFT JOIN orders o ON u.id = o.user_id 
WHERE u.created_at > '2026-01-01';

创建合适的索引:

ALTER TABLE orders ADD INDEX idx_user_id (user_id);
ALTER TABLE orders ADD INDEX idx_created_at (created_at);
ALTER TABLE users ADD INDEX idx_status_created (status, created_at);

调整InnoDB缓冲池:

innodb_buffer_pool_size = 4G
innodb_buffer_pool_instances = 4
innodb_log_file_size = 1G

五、PHP-FPM调优

pm.max_children = 300
pm.start_servers = 20
pm.min_spare_servers = 10
pm.max_spare_servers = 20
pm.max_requests = 5000
request_terminate_timeout = 30s

六、定期维护脚本

#!/bin/bash
# optimize_server.sh - 每周执行一次

find /var/log -name "*.log" -mtime +7 -exec rm -f {} \;
sync
echo 3 > /proc/sys/vm/drop_caches
rm -rf /tmp/*
rm -rf /var/tmp/*
mysqlcheck -o -A -u root -pYourPassword
systemctl restart php8.1-fpm nginx mysql
echo "优化完成: $(date)" >> /var/log/optimize.log
# crontab -e
# 0 3 * * 0 /bin/bash /root/optimize_server.sh

总结

服务器性能优化核心就三点:先监控定位瓶颈针对性调优持续维护。这些经验都是我踩过坑之后总结出来的,实战能用的东西。调完之后你会发现,同样配置的机器,性能能差出两三倍。


服务器性能优化:老司机手把手教你榨干机器性能

云服务器配置选型指南:CPU、内存、带宽到底怎么选?

评 论
请登录后再评论