centos lnmp资源限制设置
导读:CentOS LNMP资源限制设置指南 LNMP(Linux+Nginx+MySQL+PHP)架构在高并发场景下,资源限制(如文件描述符、进程数、内存等)是影响稳定性的关键因素。以下从系统级、Nginx、PHP-FPM/PHP、MySQL四...
CentOS LNMP资源限制设置指南
LNMP(Linux+Nginx+MySQL+PHP)架构在高并发场景下,资源限制(如文件描述符、进程数、内存等)是影响稳定性的关键因素。以下从系统级、Nginx、PHP-FPM/PHP、MySQL四个核心组件,梳理资源限制的设置方法:
一、系统级资源限制设置
系统级限制是组件配置的基础,需先调整以确保组件配置生效。
1. 文件描述符限制(nofile)
文件描述符用于管理打开的文件、套接字等资源,高并发下易成为瓶颈。
- 修改
/etc/security/limits.conf(永久生效):
在文件末尾添加以下内容(适用于所有用户,soft为软限制,hard为硬限制):* soft nofile 65535 * hard nofile 65535 - 修改
/etc/sysctl.conf(调整系统全局文件描述符上限):
添加以下内容并执行sysctl -p使配置生效:fs.file-max = 2097152 fs.nr_open = 2097152 - 验证:执行
ulimit -n查看当前用户的文件描述符限制。
2. 系统内核参数优化
调整TCP连接参数,提升并发处理能力:
- 编辑
/etc/sysctl.conf,添加以下内容:net.ipv4.tcp_max_tw_buckets = 6000 # 减少TIME_WAIT状态连接占用 net.ipv4.tcp_tw_reuse = 1 # 启用TIME_WAIT连接重用 net.ipv4.tcp_max_syn_backlog = 65535 # 增加SYN队列长度 net.core.somaxconn = 65535 # 增加监听队列长度 - 执行
sysctl -p使配置生效。
二、Nginx资源限制设置
Nginx作为Web服务器,需调整工作进程、连接数等参数以适应高并发。
1. 工作进程与连接数
- 编辑
/usr/local/nginx/conf/nginx.conf(或/etc/nginx/nginx.conf):worker_processes auto; # 根据CPU核心数自动设置(如4核则设为4) events { worker_connections 1024; # 每个工作进程最大连接数(需小于系统nofile限制) } - 说明:
worker_processes建议设置为CPU核心数的1-2倍;worker_connections需结合系统nofile限制(如worker_processes×worker_connections ≤ nofile)。
2. 文件描述符限制(systemd服务)
若Nginx以systemd方式运行,需修改服务文件:
- 编辑
/etc/systemd/system/nginx.service(或/lib/systemd/system/nginx.service):
在[Service]段添加:LimitNOFILE=65535 - 执行以下命令使配置生效:
systemctl daemon-reload systemctl restart nginx
三、PHP-FPM/PHP资源限制设置
PHP-FPM负责处理PHP请求,其进程管理和内存限制直接影响PHP性能。
1. PHP-FPM进程管理
- 编辑
/usr/local/php/etc/php-fpm.d/www.conf(或/etc/php-fpm.d/www.conf):pm = dynamic # 动态进程管理模式(推荐) pm.max_children = 50 # 最大子进程数(根据内存计算:如每个PHP进程占30MB,2GB内存可设为50-60) pm.start_servers = 5 # 启动时的子进程数 pm.min_spare_servers = 5 # 最小空闲子进程数 pm.max_spare_servers = 35 # 最大空闲子进程数 pm.max_requests = 500 # 每个子进程处理500个请求后重启(防止内存泄漏) rlimit_files = 10240 # 每个PHP-FPM进程的文件描述符限制(需≥系统nofile限制) - 说明:
pm.max_children是关键参数,需根据服务器内存计算(避免内存耗尽);pm.max_requests可防止PHP进程内存泄漏。
2. PHP内存与执行时间限制
- 编辑
/usr/local/php/etc/php.ini:memory_limit = 256M # 单个PHP脚本最大内存(根据应用需求调整,如Nextcloud可设为2G) max_execution_time = 300 # 脚本最大执行时间(秒,如上传大文件需调整为300) max_input_time = 60 # 输入数据最大处理时间 post_max_size = 16M # POST请求最大大小(需≥upload_max_filesize) upload_max_filesize = 10M # 单个文件最大上传大小(根据需求调整,如2G) - 说明:
memory_limit需与pm.max_children配合(如memory_limit×pm.max_children ≤ 服务器内存)。
3. OPcache加速
启用OPcache缓存PHP脚本编译结果,提升执行速度:
- 编辑
/usr/local/php/etc/php.ini,添加以下内容:[opcache] zend_extension=opcache.so opcache.enable=1 opcache.memory_consumption=128 # OPcache缓存大小(MB,如128M) opcache.interned_strings_buffer=8 # 内部字符串缓存大小(MB) opcache.max_accelerated_files=4000 # 缓存的脚本文件数量 opcache.revalidate_freq=60 # 脚本重新验证频率(秒)
四、MySQL资源限制设置
MySQL作为数据库,需调整连接数和文件句柄限制以支持高并发。
1. 连接数与文件句柄
- 编辑
/etc/my.cnf(或/etc/mysql/my.cnf):[mysqld] max_connections = 500 # 最大连接数(根据应用需求调整,如高并发可设为1000+) open_files_limit = 8192 # MySQL能打开的最大文件数(需≥系统nofile限制) innodb_buffer_pool_size = 1G # InnoDB缓冲池大小(建议为服务器内存的50%-80%,如2GB内存设为1G) - 说明:
max_connections过高会导致内存耗尽,需结合pm.max_children(PHP-FPM)和Nginx连接数调整;innodb_buffer_pool_size是MySQL性能关键参数,需预留足够内存。
五、验证与监控
- 验证配置生效:
- 执行
ulimit -n查看系统文件描述符限制; - 执行
nginx -t检查Nginx配置语法; - 执行
systemctl restart nginx php-fpm mysqld重启服务; - 查看PHP-FPM状态:
php-fpm -t(测试配置)或systemctl status php-fpm(查看运行状态)。
- 执行
- 监控资源使用:
使用top、htop、vmstat、iostat等工具监控CPU、内存、磁盘I/O使用情况;使用ss -s查看TCP连接数;使用mysqladmin status查看MySQL连接数。
以上设置需根据服务器硬件配置(CPU、内存、磁盘)和应用场景(如高并发上传、复杂查询)进行调整,建议在测试环境中验证后再应用于生产环境。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos lnmp资源限制设置
本文地址: https://pptw.com/jishu/739286.html
