悠悠楠杉
PHP命令如何限制脚本可打开的最大文件数
二、系统级限制设置方法
1. 临时修改(重启失效)
bash
查看当前限制
ulimit -n
临时修改为65535
ulimit -n 65535
2. 永久生效配置
编辑/etc/security/limits.conf
文件:
ini
* soft nofile 65535
* hard nofile 65535
www-data soft nofile 65535 # 针对特定用户(如PHP运行用户)
三、PHP专项优化方案
1. 修改php.ini关键参数
ini
; 控制同时打开的文件流数量
defaultsockettimeout = 60
; 数据库持久连接优化(需谨慎开启)
pdomysql.defaultsocket = /var/run/mysqld/mysqld.sock
2. 代码层面最佳实践
php
// 及时关闭文件句柄
$handle = fopen('file.txt', 'r');
// ...操作代码...
fclose($handle);
// 使用try-finally确保资源释放
try {
$conn = new PDO($dsn, $user, $pass);
} finally {
$conn = null;
}
四、Nginx/Apache配套设置
1. Nginx服务调整
nginx
events {
worker_connections 4096; # 每个worker进程连接数
worker_rlimit_nofile 8192; # 文件描述符上限
}
2. Apache调优
apache
<IfModule mpm_prefork_module>
ServerLimit 1024
MaxClients 512
MaxRequestsPerChild 10000
</IfModule>
五、疑难问题排查指南
查看进程当前限制:
bash cat /proc/$(pgrep php-fpm)/limits | grep 'Max open files'
统计已打开文件数:
bash lsof -p $(pgrep php-fpm) | wc -l
常见错误解决方案:
- 出现
EMFILE
错误:检查是否达到系统级限制 SELinux
阻挡:通过audit2allow
工具分析日志
- 出现
六、生产环境建议值
| 场景类型 | 推荐值 | 备注 |
|----------------|---------|-----------------------|
| 低并发CMS | 4096 | 常规内容管理系统 |
| 电商平台 | 32768 | 需配合连接池使用 |
| 微服务架构 | 65535 | 需分布式文件系统支持 |
通过以上多维度设置,可有效平衡系统资源利用与PHP脚本性能。建议每次修改后通过php -i | grep 'php.ini'
确认配置加载路径,并重启相关服务使配置生效。