Ubuntu LAMP服务器性能优化指南
LAMP(Linux、Apache、MySQL、PHP)是常见的Web服务堆栈,优化其性能需从系统底层、组件配置、缓存策略、代码质量等多维度入手,以下是具体优化措施:
systemctl disable <service_name>命令关闭未使用的服务(如蓝牙、打印服务等),释放系统资源(CPU、内存),减少后台进程对服务器性能的占用。mkfs命令重新格式化磁盘(需备份数据),减少文件系统碎片化,提升磁盘I/O效率。/etc/sysctl.conf文件,调整TCP连接参数(如net.core.somaxconn设置为1024,增加监听队列长度)、文件描述符数量(如fs.file-max设置为65535,允许更多并发连接),提升系统处理高并发的能力。prefork模式(多进程)适合低并发场景,但内存消耗大;worker(多进程多线程)或event(事件驱动)模式适合高并发,能显著降低内存占用。通过sudo a2dismod mpm_prefork && sudo a2enmod mpm_event切换模式,并修改/etc/apache2/mods-enabled/mpm_event.conf中的关键参数:
MaxRequestWorkers:根据服务器内存设置(如每进程占用10MB,1GB内存可设为500),限制最大并发请求数,避免资源耗尽;MaxConnectionsPerChild:设置为1000-5000,限制每个子进程处理的请求数,防止内存泄漏累积。/etc/apache2/apache2.conf中设置KeepAlive On,并调整KeepAliveTimeout(如30秒)、MaxKeepAliveRequests(如100),减少TCP连接建立的开销(三次握手),提升页面加载速度。sudo a2enmod deflate启用mod_deflate模块,在配置文件中添加AddOutputFilterByType DEFLATE text/html text/css application/javascript,压缩HTML、CSS、JS等文本文件(压缩率可达50%-70%),减小传输数据量,提高页面渲染速度。mod_cache(如mod_cache_disk)缓存静态内容(图片、CSS、JS),减少对后端PHP和MySQL的请求,提升响应速度。WHERE、JOIN子句中的列)创建索引(如CREATE INDEX idx_name ON users(username)),避免全表扫描。使用EXPLAIN命令分析查询执行计划,确认是否使用了索引。/etc/mysql/my.cnf文件,优化内存分配:
innodb_buffer_pool_size:设置为系统内存的50%-80%(如1GB内存设为768M),作为InnoDB引擎的缓存池,缓存数据和索引,减少磁盘I/O;query_cache_size:若查询重复率高(如静态内容),可设置为64M-128M;若查询变化频繁(如电商订单),建议设为0(避免缓存失效的开销)。SELECT *(只查询需要的列)、子查询(改用JOIN)、临时表(优化为临时变量),减少数据库的计算量和资源消耗。my.cnf中设置slow_query_log = On、long_query_time = 2(超过2秒的查询视为慢查询),定期分析慢查询日志(使用mysqldumpslow工具),定位并优化性能瓶颈查询。OPTIMIZE TABLE命令整理表碎片(针对频繁更新的表,如日志表),提升数据读取效率;定期备份并清理无用数据(如过期的日志、临时表)。OPcache(PHP内置,无需额外安装)缓存编译后的PHP脚本(.php文件编译后的opcode),避免每次请求都重新编译,显著提升PHP执行效率。修改/etc/php/<version>/apache2/php.ini(如/etc/php/8.1/apache2/php.ini),设置:opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.validate_timestamps=1
ob_start('ob_gzhandler')),减少数据传输量。Memcached或Redis作为内存缓存系统,缓存数据库查询结果(如商品详情、用户信息)、会话数据(session.save_handler = memcached),减少对MySQL的访问频率,提升响应速度。例如,使用php-memcached扩展连接Memcached:sudo apt install php-memcached,然后在代码中通过$memcached->get()/$memcached->set()操作缓存。mod_expires模块设置静态资源的过期时间(如ExpiresActive On、ExpiresByType image/jpeg "access plus 1 month"),让浏览器缓存图片、CSS、JS等资源,减少重复请求。HAProxy或LVS(Linux Virtual Server)实现负载均衡,将请求分发到多台LAMP服务器,提高服务器集群的吞吐量(如支持10万+并发请求),避免单点故障。Netplan(Ubuntu的网络配置工具)优化网络参数(如调整MTU为1500、启用TCP Fast Open),并使用CDN或DNS缓存(如dnsmasq)减少DNS解析时间(将解析时间从几百毫秒缩短至几毫秒)。top(查看CPU、内存占用)、vmstat(查看系统整体性能)、iostat(查看磁盘I/O)、netstat(查看网络连接)等命令,或使用Prometheus+Grafana搭建可视化监控平台,实时监控服务器的各项指标(如CPU使用率、内存占用、数据库查询时间),及时发现性能瓶颈。access.log、MySQL的error.log)、临时文件(/tmp目录),使用du(查看目录大小)、df(查看磁盘空间)命令检查磁盘使用情况,避免磁盘空间耗尽导致服务器崩溃。rsync(增量备份)、Bacula(企业级备份)等工具,确保数据安全,并定期测试备份的恢复流程(如模拟数据库崩溃,恢复数据)。