总结一

Apache日志记录客户端IP,而不是nginx代理的IP:

      在nginx配置文件的location中设置proxy_set_header X-Real-IP $remote_addr;

                 再修改http的配置文件,日志格式LogFormat "%{X-Real-IP}..............."

 

出现502状态码,大量接口调用超时:查看系统日志,提示:"nf_conntrack: table full, dropping packet." 

                  nf_conntraack:连接跟踪表;

                  这个提示表示:连接跟踪表已满,开始丢包,使用“lsmod | grep nf_conntrack”查看模块。若是ip_vs引起,卸载ipvsadm和firewalld,并删除内核模块"ip_vs"和"nf_conntrack"模块,yum remove,rmmod

                  为了使ip_vs不自动调用,vim /etc/modprobe.d/blacklist.conf 加入blacklist nf_conntrack, install nf_conntrack /bin/false

 

PHP-FPM进程高:

      CGI:是为了保证web server传递过来的数据是标准格式的,它是一个协议;CGI针对每个http请求都是fork一个新进程来进行处理,处理过程包括解析php.ini文件,初始化执行环境等,然后这个进程会把处理完的数据返回给web服务器,最后web服务器把内容发送给用户,刚才fork的进程也随之退出。 如果下次用户还请求动态资源,那么web服务器又再次fork一个新进程,周而复始的进行。

                 Fastcgi:是CGI的更高级的一种方式,是用来提高CGI程序性能的,它也是一个协议;Fastcgi则会先fork一个master,解析配置文件,初始化执行环境,然后再fork多个worker。当请求过来时,master会传递给一个worker,然后立即可以接受下一个请求。这样就避免了重复的劳动,效率自然是高。而且当worker不够用时,master可以根据配置预先启动几个worker等着;当然空闲worker太多时,也会停掉一些,这样就提高了性能,也节约了资源。这就是Fastcgi的对进程的管理。大多数Fastcgi实现都会维护一个进程池。

      PHP-Cgi:PHP的解释器是php-cgi。php-cgi只是个CGI程序,只能解析请求,返回结果

                 PHP-FPM :是 PHP 针对 FastCGI 协议的具体实现;每个进程完成请求处理后会回收内存,但是并不会释放给操作系统,这就导致大量内存被 PHP-FPM 占用而无法释放,请求量升高时性能骤降;PHP-FPM 模式下的进程是单一线程的,请求无法并发。这个参数的真正意义是提供请求计数器的功能,超过阈值数目后自动回收,缓解内存压力。

                 Php-fpm参数:

            pm:,有两个值可以选择,就是static(静态)或者dynamic(动态)。

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

            pm.max_requests : 子进程请求数阈值,超过后自动回收

      处理方式:
          strace -p PID
                             ll /proc/PID/fd
          pmap $(pgrep 要查的程序名 | head -1)
 
          


                

posted @ 2017-01-10 12:32  songge1209  阅读(113)  评论(0编辑  收藏  举报