Linux Apache与PHP总结

Apache相关

实时检测HTTPD连接数:

watch -n 1 -d "pgrep httpd|wc -l"

watch -n 1 -d "netstat -an | grep ESTABLISHED | wc -l" #实时监控信息

查看apache进程数(命令优化:grep -v 是反向查找的意思,比如 grep -v grep 就是查找不含有 grep 字段的行)

ps aux|grep httpd |grep -v grep
ps aux|grep httpd |grep -v grep |wc -l

这里计数结果可以宝塔面板 Apache管理 中  空闲进程(IdleWorkers)+繁忙进程(BusyWorkers)+1

计算httpd占用内存的平均数:
ps aux|grep -v grep|awk '/httpd/{sum+=$6;n++};END{print sum/n}'

如每个占5M,如系统除去其他应用,剩余2000M,则可以同时又2000/5=400 个进程

案例 5813.58

Apache详解:

  1. Apache服务的工作原理
  2. apache配置中的Timeout和KeepAliveTimeout的解释
  3. 查看Apache并发连接数及其TCP连接状态

内存计算

案例情况

apache 5.6M/个  最大100  5.6*100=560M

PHP 40M/个 最大15  40*15=600M

MYSQL 15%*1880M=283.2M 按300算

共计 1460M

Apache性能设置

配置一

StartServers              5         #apache启动时候默认开始的进程数
MinSpareServers            5             #最小的闲置进程数
MaxSpareServers           10              #最大的闲置进程数
ServerLimit  256         #最大的进程总数(参考,实际看MaxRequestWorkers)
MaxRequestWorkers         256  #最大的进程总数(Apache 2.4版本前为MaxClients)
MaxConnectionsPerChild    4000  #每个进程处理的最多请求数(Apache2.4版本前MaxRequestsPerChild)

在apache2.3.13以前的版本MaxRequestWorkers被称为MaxClients 。本站 2.4

MaxRequestsPerChild这个指令设定一个独立的子进程将能处理的请求数量。

在处理“MaxRequestsPerChild 数字”个请求之后,子进程将会被父进程终止,这时候子进程占用的内存就会释放,如果再有访问请求,父进程会重新产生子进程进行处理。

如果MaxRequestsPerChild缺省设为0(无限)可以使每个子进程处理更多的请求,不会因为不断终止、启动子进程降低访问效率。

但如果占用了200~300M内存,即使负载下来时占用的内存也不会减少。内存较大的服务器可以设置为0或较大的数字。内存较小的服务器不妨设置成30、50、100,以防内存溢出。原文链接:https://www.cnblogs.com/xiaoleiel/p/8308418.html

配置二

引用自:Apache服务的工作原理

因此,应充分利用Apache的原理特性及工作平台,合理地配置以下参数,在运行时动态调整,以使Apache达到最合理的状态:

MaxKeepAliveRequests 100
# 一次连接可以进行的HTTP请求的最大请求次数(比如客户一次连接中请求几十个页面)。

MinSpareServers 5
MaxSpareServers 10
# Apache预先生成多个空余的子进程驻留系统中,用于处理客户请求。两个参数用于设置最小的空余子进程数量及最多的空闲子进程数量。

StartServers 5
# 设置httpd启动时启动的子进程数量。这个参数应设置为前两个值之间的一个数值。小于或大于前两个数值都没有意义。

MaxRequestWorkers 150
# 服务器支持的最大并发访问的客户数。
# 应根据服务器的物理内存及处理器动态调整。
#Apache 2.4 版本中 MaxClients 改为 MaxRequestWorkers

MaxRequestsPerChild 30
# 每个子进程处理的服务请求次数。超过此值后,子进程副本退出,重新由原始的htttd进程中重新复制一个干净的副本,以提高系统的稳定性。
# 对于静态页面,产生的内存垃圾少,可设置为2000,甚至更高;如服务器载入各种不同的功能模块,产生内存垃圾多,可将此值降低。
# 对于高稳定的系统,如FreeBSD,可设成1000,或更高。

转自:http://blog.tianya.cn/blogger/post_show.asp?BlogID=40003&PostID=4585547

实际案例

PHP相关

查看PHP进程进程数

ps aux|grep php-fpm |grep -v grep
ps aux|grep php-fpm |grep -v grep |wc -l

prefork 下StartServers、MinSpareServers、MaxSpareServers等选项的关系:https://blog.csdn.net/u013831156/article/details/58073436?utm_source=blogxgwz7

获取php-fpm的连接数,此命令是获取到php-fpm程序的总连接数

netstat -napo |grep "php-fpm" | wc -l

1、netstat是输出TCP, UDP以及Unix Socket的信息。

PHP FPM一般是监听TCP或者Unix Socket,用netstat可以查看已通过TCP方式或Unix Socket方式与PHP FPM建立的连接数。

netstat:
-o或–timers:显示计时器;
-n或–numeric 直接使用IP地址,而不通过域名服务器。
-a或–all:显示所有连线中的Socket;
-p或–programs:显示正在使用Socket的程序识别码和程序名称;

2、wc命令:

Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数、字数、行数,并将统计结果显示输出。

-c 统计字节数。
-l 统计行数。
-m 统计字符数。这个标志不能与 -c 标志一起使用。
-w 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。
-L 打印最长行的长度。
-help 显示帮助信息
–version 显示版本信息

查看当前php-fpm进程平均占用内存情况

ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'

相关文章:

PHP-FPM进程数的设定

lsof 命令可以展示一个进程打开的所有文件,或者打开一个文件的所有进程。从这个列表中,我们可以找到具体是什么文件被写入,根据文件的大小和/proc中io文件的具体数据

我们可以使用-p <pid>的方式来减少输出,pid是具体的进程

lsof -p 1028

 

未经允许不得转载:Song It » Linux Apache与PHP总结

相关文章

评论 (0)