在我的PHP-FPMconfiguration中,我有3个池,例如:Config是:
;;;;;;;;;;;;;;;;;;;;;;; ; Pool 1 ; ;;;;;;;;;;;;;;;;;;;;;;; [www1] user = www group = www listen = /tmp/php-fpm1.sock; listen.backlog = -1 listen.owner = www listen.group = www listen.mode = 0666 pm = dynamic pm.max_children = 40 pm.start_servers = 6 pm.min_spare_servers = 6 pm.max_spare_servers = 12 pm.max_requests = 250 slowlog = /var/log/php/$pool.log.slow request_slowlog_timeout = 5s request_terminate_timeout = 120s rlimit_files = 131072 ;;;;;;;;;;;;;;;;;;;;;;; ; Pool 2 ; ;;;;;;;;;;;;;;;;;;;;;;; [www2] user = www group = www listen = /tmp/php-fpm2.sock; listen.backlog = -1 listen.owner = www listen.group = www listen.mode = 0666 pm = dynamic pm.max_children = 40 pm.start_servers = 6 pm.min_spare_servers = 6 pm.max_spare_servers = 12 pm.max_requests = 250 slowlog = /var/log/php/$pool.log.slow request_slowlog_timeout = 5s request_terminate_timeout = 120s rlimit_files = 131072 ;;;;;;;;;;;;;;;;;;;;;;; ; Pool 3 ; ;;;;;;;;;;;;;;;;;;;;;;; [www3] user = www group = www listen = /tmp/php-fpm3.sock; listen.backlog = -1 listen.owner = www listen.group = www listen.mode = 0666 pm = dynamic pm.max_children = 40 pm.start_servers = 6 pm.min_spare_servers = 6 pm.max_spare_servers = 12 pm.max_requests = 250 slowlog = /var/log/php/$pool.log.slow request_slowlog_timeout = 5s request_terminate_timeout = 120s rlimit_files = 131072
我根据networking上的一些示例计算来计算pm.max_children进程,例如40 x 40 Mb = 1600 Mb 。 我已经分离了4 GB的PHP的内存,现在根据计算40个儿童进程通过一个套接字,我有我的Nginx和FPMconfiguration总共3个sockets。 我怀疑这些subprocess的内存消耗量。
我尝试通过httperf hog和siege在服务器端创build高负载,但是我无法计算所有PHP进程的准确内存使用情况(其他进程(如MySQL和Nginx也在运行))。 所有的套接字都被使用了,所以我从之前的任何人那里寻求指导,或者知道PHP中的pm.max_children是如何工作的。
因为我有3个40个subprocess的池/套接口,这个数量是3 x 40 x 40 Mb的内存使用量吗? 或者就像40最大。 subprocess共享3个套接字(总内存使用量仅为40 x 40 Mb )?
这个问题没有简单的答案。 一个内存数字很难放到运行的PHP-FPM进程中。
首先,一个进程的内存使用通常被分成多个部分(通常是共享的和非共享的内存)。 共享内存的使用很大程度上取决于PHP中库的使用情况。
如果您需要的指导是为繁忙的Web服务器优化正确的设置,我可以推荐以下内容:
我想你正在寻求适合你服务器尺寸的最佳内存设置。 请记住,一个请求的持续时间对保持Web服务器响应所需的进程量也有很大的影响。
测量内存的一个很好的参考是在计算器上 。
下面的python脚本会很有帮助,因为它会告诉你所有孩子使用php-fpm的总内存量, 的孩子,以及负载testing期间使用的共享/私有内存: