总结一
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 : 子进程请求数阈值,超过后自动回收
ll /proc/PID/fd