我们在用服务器配置网站的时候,对于PHP软件的参数配置中upload_max_filesize设置还是比较讲究的。如果配置的不好,可能负载在线人数就支持不多,如果配置的好可以负载就更高一些。

upload_max_filesize 是 PHP 配置项,用于设置允许上传的单个文件的最大大小。下面是一些设置 upload_max_filesize 的技巧:

1、参数值

upload_max_filesize 的值可以使用字节(例如 100M 表示 100 兆字节)或其他有效的单位(如 K、KB、M、MB、G、GB)。确保正确理解和使用适当的单位。

编辑 php.ini 文件:在服务器上找到 php.ini 文件,并使用文本编辑器打开。搜索 upload_max_filesize 配置项,在等号后面设置所需的值。例如:

upload_max_filesize = 100M

2、设置合适的文件大小限制

根据实际需求和应用场景,设置适当的文件大小限制。考虑上传文件的类型和服务器资源的可用性,以避免出现过大的文件导致服务不稳定或资源耗尽的问题。

3、重启服务器

保存 php.ini 文件并重新启动服务器,使新的配置生效。这样,PHP 将按照新的 upload_max_filesize 值处理文件上传请求。

4、处理其他相关配置项

上传文件大小还受到其他相关 PHP 配置项的影响,如 post_max_size 和 memory_limit。确保将这些配置项与 upload_max_filesize 协调一致,以确保完整的文件上传过程。

5、考虑安全性

在设置 upload_max_filesize 时,要谨慎考虑安全性问题。确保合理限制上传文件的大小,以防止恶意用户滥用和服务器资源受到过大文件的影响。

总结,一般我们在用成熟的一键安装面板和软件包的时候,会自动根据我们的服务器配置设置初始的值,如果我们后续调整过服务器配置那就需要自己手工再调整PHP的一些参数值。

前言

最近有些 MJJ 采集博客,使内存有些超标,看了下文件发现军哥的 LNMP 的php-fpm配置是按最低标准设置的,这里可以稍微修改下,适用于自己的 VPS 配置。

修改说明

php-fpm设置动态还是静态,要根据你的 VPS 内存来定,如果内存小,比如 1G,那么指定静态的进程数量更加有利于服务器的稳定。这样可以保证 php-fpm 只获取够用的内存,将不多的内存分配给其他应用去使用,会使系统的运行更加畅通。

如果你的内存足够大,例如 4G 或 4G 以上你可以将 pm 设置成静态(static),因为这样不需要进行额外的进程数目控制,会提高效率(频繁开关 php-fpm 进程也会有时滞的)所以内存够大的情况下开静态效果会更好。
比如 4GB 内存可以设置为pm.max_children = 80,那么按照每个进程占用 15~30M 内存计算,php-fpm 耗费的内存就能控制在 1.2G-2.5G 的样子。

这里主要修改几个参数,说明一下:

  • pm.max_children:静态方式下开启的 php-fpm 进程数量;
  • pm.start_servers:动态方式下的起始 php-fpm 进程数量;
  • pm.min_spare_servers:动态方式下的最小备用 php-fpm 进程数量;
  • pm.max_spare_servers:动态方式下的最大备用 php-fpm 进程数量;

这里是军哥 LNMP 的/usr/local/php/etc/php-fpm.conf默认 1G 配置,LNMP 也会根据内存大小安装后配置不同,仅用于参考

pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 6
pm.max_requests = 1024
pm.process_idle_timeout = 10s
request_terminate_timeout = 100
request_slowlog_timeout = 0
slowlog = var/log/slow.log

博主的机器是 1G 内存,修改后的配置可以参考,具体参数要设多少,可自己慢慢测试

pm = dynamic
pm.max_children = 24
pm.start_servers = 6
pm.min_spare_servers = 3
pm.max_spare_servers = 9
pm.max_requests = 2048
pm.process_idle_timeout = 10s
request_terminate_timeout = 120
request_slowlog_timeout = 0
slowlog = var/log/slow.log

结语

博主在使用pm = dynamic,  有时日志(/usr/local/php/var/log/php-fpm.log)里提示  pm.max_children  过小,  调大  pm.max_children  值, 日志里的 pm.max_children  警告就没有了。

nginx 发现警告日志提示:

WARNING: [pool www] server reached pm.max_children setting (5), consider raising it

原因是max_children设置太小了。

php-fpm.conf有两个至关重要的参数:

一个是”max_children”,另一个是”request_terminate_timeout”。

pm.max_children 表示 php-fpm 能启动的子进程的最大数量。

request_terminate_timeout 表示将执行时间太长的进程直接终止。

我的两个设置的值一个是”40″,一个是”900″,但是这个值不是通用的,而是需要自己计算的。

一、pm.max_children 多大合适?

这个值原则上是越大越好,php-cgi的进程多了就会处理的很快,排队的请求就会很少。

设置”max_children” 也需要根据服务器的性能进行设定。

计算方式如下:

一般来说一台服务器正常情况下每一个php-cgi所耗费的内存在20M~30M左右,因此我的”max_children”我设置成40个,20M*40=800M也就是说在峰值的时候所有PHP-CGI所耗内存在800M以内,低于我的有效内存2Gb。

而如果我 的”max_children”设置的较小,比如5-10个,那么php-cgi就会“很累“,处理速度也很慢,等待的时间也较长,占用的CPU也很高。

如果长时间没有得到处理的请求就会出现 504 Gateway Time-out 这个错误,而正在处理的很累的那几个php-cgi如果遇到了问题就会出现 502 Bad gateway 这个错误。

max_children较好的设置方式根据req/s(吞吐率,单位时间里服务器处理的最大请求数,单位req/s)来设置,若程序是 100 req/s 的处理能力,那么就设置 100比较好,这是动态来调整的。

二、request_terminate_timeout 多大合适?

计算方式如下:

如果你的服务器性能足够好,且宽带资源足够充足,PHP脚本没有循环或BUG的话你可以直接将”request_terminate_timeout”设 置成0s。0s的含义是让PHP-CGI一直执行下去而没有时间限制。

而如果你做不到这一点,也就是说你的PHP-CGI可能出现某个BUG,或者你的宽带不够充足或者其他的原因导致你的PHP-CGI能够假死那么就建议你给”request_terminate_timeout”赋一个值,这个值可以根 据你服务器的性能进行设定。

一般来说性能越好你可以设置越高,20分钟-30分钟都可以。由于我的服务器PHP脚本需要长时间运行,有的可能会超过10分钟因此我设置了900秒,这样不会导致PHP-CGI死掉而出现502 Bad gateway这个错误。