首先我的php-fpm.conf里面的配置是:
pm = dynamic
pm.max_children = 6
pm.start_servers = 2
pm.min_spare_servers = 2
pm.max_spare_servers = 6
查看此时的php-fpm的进程ps -ef f |grep php-fpm |grep -v "grep"
[root@VM_132_97_centos etc]# ps -ef f |grep php-fpm |grep -v "grep"
root 25325 1 0 23:35 ? Ss 0:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
www 25326 25325 0 23:35 ? S 0:00 \_ php-fpm: pool www
www 25327 25325 0 23:35 ? S 0:00 \_ php-fpm: pool www
然后我再通过top -p pid来查看php-fpm各个进程占用的内存大小:
[root@VM_132_97_centos etc]# top -p 25325,25326,25327
top - 23:47:53 up 157 days, 8:22, 1 user, load average: 0.11, 0.05, 0.02
Tasks: 3 total, 0 running, 3 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.2%us, 0.2%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 3921660k total, 2547920k used, 1373740k free, 494916k buffers
Swap: 2097144k total, 0k used, 2097144k free, 1562516k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
25325 root 20 0 310m 5760 928 S 0.0 0.1 0:00.12 php-fpm
25326 www 20 0 310m 9372 3496 S 0.0 0.2 0:00.03 php-fpm
25327 www 20 0 310m 8748 3380 S 0.0 0.2 0:00.02 php-fpm
总内存为3921660k,php-fpmmaster进程占用的内存为总内存的0.1%,也就是3.829M;两个子进程分别占用的内存为总内存的0.2%,也就是7.659M。
修改后
pm = dynamic
pm.max_children = 60
pm.start_servers = 30
pm.min_spare_servers = 20
pm.max_spare_servers = 60
通过ps -ef f |grep php-fpm |grep -v "grep"|wc -l查看得到的结果是31,实际查看是1个主进程30个子进程。
[root@VM_132_97_centos etc]# ps -ef f |grep php-fpm |grep -v "grep"|wc -l
31
[root@VM_132_97_centos etc]# pidof php-fpm
431 430 429 428 427 426 424 423 422 421 420 419 418 417 416 415 414 413 412 411 410 409 408 407 406 405 404 403 402 401 400
[root@VM_132_97_centos etc]# ps -ef f |grep php-fpm |grep -v "grep"
root 400 1 0 00:02 ? Ss 0:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
www 401 400 0 00:02 ? S 0:00 \_ php-fpm: pool www
www 402 400 0 00:02 ? S 0:00 \_ php-fpm: pool www
www 403 400 0 00:02 ? S 0:00 \_ php-fpm: pool www
...
同样通过top -p pid来查看进程占用内存的情况:
top - 00:07:56 up 157 days, 8:42, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 19 total, 0 running, 19 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.2%us, 0.3%sy, 0.0%ni, 99.5%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 3921660k total, 2570892k used, 1350768k free, 494920k buffers
Swap: 2097144k total, 0k used, 2097144k free, 1562760k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
400 root 20 0 310m 5984 1144 S 0.0 0.2 0:00.02 php-fpm
401 www 20 0 310m 5492 660 S 0.0 0.1 0:00.00 php-fpm
402 www 20 0 310m 8208 3092 S 0.0 0.2 0:00.00 php-fpm
403 www 20 0 310m 5496 660 S 0.0 0.1 0:00.00 php-fpm
404 www 20 0 310m 5496 660 S 0.0 0.1 0:00.00 php-fpm
405 www 20 0 310m 8244 2924 S 0.0 0.2 0:00.00 php-fpm
406 www 20 0 310m 5496 660 S 0.0 0.1 0:00.00 php-fpm
407 www 20 0 310m 5496 660 S 0.0 0.1 0:00.00 php-fpm
408 www 20 0 310m 8856 3228 S 0.0 0.2 0:00.00 php-fpm
409 www 20 0 310m 8244 2924 S 0.0 0.2 0:00.00 php-fpm
410 www 20 0 310m 8244 2924 S 0.0 0.2 0:00.00 php-fpm
411 www 20 0 310m 8244 2924 S 0.0 0.2 0:00.00 php-fpm
412 www 20 0 310m 8244 2924 S 0.0 0.2 0:00.00 php-fpm
413 www 20 0 310m 8244 2924 S 0.0 0.2 0:00.00 php-fpm
414 www 20 0 310m 5496 660 S 0.0 0.1 0:00.00 php-fpm
415 www 20 0 310m 5496 660 S 0.0 0.1 0:00.00 php-fpm
416 www 20 0 310m 5496 660 S 0.0 0.1 0:00.00 php-fpm
417 www 20 0 310m 5496 660 S 0.0 0.1 0:00.00 php-fpm
418 www 20 0 310m 5496 660 S 0.0 0.1 0:00.00 php-fpm
总内存为3921660k,php-fpmmaster进程占用的内存为总内存的0.2%;各个子进程占用的内存为总内存的0.2%或者0.1%。后面我有做了测试,发下有时候子进程占用的内存都为0.4%。看来php-fpm进程所占内存的大小,不是固定不变的。仅仅是修改参数重启前后,主进程的内存占用就有变化。
跟踪调查:
2015-01-13 是1个php-fpm主进程,6个子进程。内存使用0.6455G
2015-01-20 是1个php-fpm主进程,30个子进程。内存使用0.4785G
这样平均下来,每个进程占用的内存就是6.958M。虽然内存利用率和CPU的利用率都上去了,但是负载有点过高了。负载之前从来不过0.1,修改后,负载高的时候直接飙到0.56。这是为何?
后续:
我在11点的时候将php-fpm配置又改回了初始的情况,只有6个子进程,内存的使用率立即降了下去,但是CPU的的利用率和负载延迟到15点才降下去,延时了4个小时。但是可以确定就是php-fpm的配置原因。