CGI,全称为“Common Gateway Interface”,是指WEB服务器运行外部程序或脚本的一种标准。
而PHP CGI进程则是指运行PHP动态脚本时的进程,它由WEB服务器(如Apache、Nginx等)调用,以响应客户端的请求。PHP是一种服务器端脚本语言,CGI进程是将PHP代码转换成可被机器执行的指令集,并输出结果给客户端。
举个例子,当用户在浏览器中访问如下地址:example/index.php ,WEB服务器将会调用PHP CGI进程,执行index.php文件中的脚本,然后把执行的结果返回给浏览器,用户就能看到生成的网页内容。
在PHP的CGI进程中,由于Web服务器处理速度相对较慢,因此PHP采取了进程池的机制,即在服务器启动时便创建多个CGI进程,这些进程被复用,以提高PHP脚本的执行效率和响应速度。
多进程可以减少CGI进程的请求等待时间,提高服务器的并发处理能力。但进程数不宜过多,一般情况下进程数量应控制在20个以内,否则会引发服务器负载过高、CPU占用过高等问题。
//创建4个PHP-CGI进程的命令spawn-fcgi -a 127.0.0.1 -p 9000 -C 4 -f /usr/bin/php-cgi
其中,spawn-fcgi是Fastcgi的一部分工具,用于生成CGI进程;-a参数指定监听地址,-p参数指定监听端口,-C参数指定并发数,-f参数指定CGI程序路径。
在使用php-fpm时,可以通过设置process_manager_start_servers、process_manager_min_spare_servers和process_manager_max_spare_servers等参数控制PHP CGI进程池的大小。process_manager_start_servers指定启动时进程池的大小, process_manager_min_spare_servers和process_manager_max_spare_servers则指定进程池中最小和最大空闲进程数。
;php-fpm 配置文件:process_manager_start_servers = 5process_manager_min_spare_servers = 2process_manager_max_spare_servers = 8
当客户端请求PHP脚本时, PHP-fpm会判断现有的进程是否符合要求(是否大于等于最小空闲进程数和是否小于等于最大空闲进程数),如符合则直接使用进程池中的CGI进程。如果不符合,则会创建新的CGI进程,直至符合要求。
在PHP CGI进程池的管理中,注意要根据服务器的硬件性能和负载情况来调整池子的大小。过大或过小都会对服务器造成负担,不利于PHP脚本的高效执行。
我们需要注意的是,当一个进程运行时间过长或者占用的内存超过限制时,我们需要及时kill掉当前进程,同时Web服务器会自动重启一个新的CGI进程以代替被kill掉的进程,确保服务器的正常运行。
//杀掉CPU占用超过8%的PHP-CGI进程ps -ef | grep "php-cgi" | awk '$3>8 {print $2}' | xargs kill
在以上命令中,ps指用于查看系统进程,grep指用于查找特定进程,awk是Linux系统的文本处理工具,xargs则是从标准输入中读取数据并将其转化为命令参数。当进程的CPU使用率超过了8%时,通过xargs启动kill命令结束进程。
在CGI进程的管理过程中,我们需要时刻关注服务器的运行状态,及时调整CGI进程池的大小,使其能够更好地适应服务器的硬件能力和负载情况。