| 
       
	做服务器运维的时候,会经常遇到,php-fpm进程CPU 100%,那怎么知道PHP-FPM在运行什么占用那么多的CPU呢? 
	可以通过进程查看: 
	一、进程跟踪 
	# top                  //找出CPU使用率高的进程PID 
	# strace -p PID              //跟踪进程 
	# ll /proc/PID/fd            //查看该进程在处理哪些文件 
	将有可疑的PHP代码修改之,如:file_get_contents没有设置超时时间。 
	  
	二、当然也可能是内存小的影响: 
	  
	一般PHP-CGI打开大概20M-30M左右的内存,可以看看是否开的php-cgi进程多了, 
	  
	三、监控的方式(网上找的方法): 
	最后,还可以通过监控与自动恢复的脚本保证服务的正常运转。 
	下面是我用到的一些脚本: 
	只要一个php-cgi进程占用的内存超过 %1 就把它kill掉 
	
		
		
			
				
					
						
							2 | 
						
							PIDS=`ps aux|grep php-cgi|grep -v grep|awk’{if($4>=1)print $2}’` | 
					 
				
			 
		 
		
		
		
			
				
					
						
							5 | 
						
							echo `date +%F….%T`>>/data/logs/phpkill.log | 
					 
				
			 
		 
		
			
				
					
						
							6 | 
						
							echo $PID >> /data/logs/phpkill.log | 
					 
				
			 
		 
		
		
	 
 
 
 
检测php-fpm进程 
	
		
		
			
				
					
						
							2 | 
						
							netstat -tnlp | grep “php-cgi” >> /dev/null  | 
					 
				
			 
		 
		
			
				
					
						
							3 | 
						
							if [ "$?" -eq "1" ];then  | 
					 
				
			 
		 
		
			
				
					
						
							4 | 
						
							/usr/local/webserver/php/sbin/php-fpm start | 
					 
				
			 
		 
		
			
				
					
						
							5 | 
						
							echo `date +%F….%T` “System memory OOM.Kill php-cgi. php-fpm service start. ” >> /data/logs/php_monitor.log | 
					 
				
			 
		 
		
	 
 
 
通过http检测php执行 
	
	
		
		
			
				
					
						
							2 | 
						
							status=`curl -s –head “http://127.0.0.1:8080/chk.php” | awk ‘/HTTP/ {print $2}’` | 
					 
				
			 
		 
		
			
				
					
						
							3 | 
						
							if [ $status != "200" -a $status != "304" ]; then | 
					 
				
			 
		 
		
			
				
					
						
							4 | 
						
							/usr/local/webserver/php/sbin/php-fpm restart | 
					 
				
			 
		 
		
			
				
					
						
							5 | 
						
							echo `date +%F….%T` “php-fpm service restart” >> /data/logs/php_monitor.log | 
					 
				
			 
		 
		
	 
 
 
 
      (责任编辑:IT) |