网站在线人数增多,访问时很慢。初步认为是服务器资源不足了,但经反复测试,一旦连接上,不断点击同一个页面上不同的链接,都能迅速打开,这种现象就是说明apache最大连接数已经满了,新的访客只能排队等待有空闲的链接,而如果一旦连接上,在keeyalive 的存活时间内(KeepAliveTimeout,默认5秒)都不用重新打开连接,因此解决的方法就是加大apache的最大连接数。

1.在哪里设置
服务器的为FreeBSD 6.2 ,apache 2.24,使用默认配置(FreeBSD 默认不加载自定义MPM配置),默认最大连接数是250
在/usr/local/etc/apache22/httpd.conf中加载MPM配置(去掉前面的注释):
# Server-pool management (MPM specific)
Include etc/apache22/extra/httpd-mpm.conf
可见的MPM配置在/usr/local/etc/apache22/extra/httpd-mpm.conf,但里面根据httpd的工作模式分了很多块,哪一部才是当前httpd的工作模式呢?可通过执行 apachectl -l 来查看:
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c
看到prefork,因此可见当前httpd应该是工作在prefork模式,prefork模式的默认配置是:

StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0

2.要加到多少
连接数理论上当然是支持越大越好,但要在服务器的能力范围内,这跟服务器的CPU、内存、带宽等都有关系。
查看当前的连接数可以用:
ps aux | grep httpd | wc -l
或:
pgrep httpd|wc -l

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

由于基本都是静态页面,CPU消耗很低,每进程占用内存也不算多,大约200K。服务器内存有2G,除去常规启动的服务大约需要500M(保守估计),还剩1.5G可用,那么理论上可以支持1.5*1024*1024*1024/200000 = 8053.06368
约8K个进程,支持2W人同时访问应该是没有问题的(能保证其中8K的人访问很快,其他的可能需要等待1、2秒才能连上,而一旦连上就会很流畅)控制最大连接数的MaxClients ,因此可以尝试配置为:

StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 5500
MaxClients 5000
MaxRequestsPerChild 100

注意,MaxClients默认最大为250,若要超过这个值就要显式设置ServerLimit,且ServerLimit要放在MaxClients之前,值要不小于MaxClients,不然重启httpd时会有提示。
重 启httpd后,通过反复执行pgrep httpd|wc -l 来观察连接数,可以看到连接数在达到MaxClients的设值后不再增加,但此时访问网站也很流畅,那就不用贪心再设置更高的值了,不然以后如果网站访问突增不小心就会耗光服务器内存,可根据以后访问压力趋势及内存的占用变化再逐渐调整,直到找到一个最优的设置值。
(MaxRequestsPerChild不能设置为0,可能会因内存泄露导致服务器崩溃)
更佳最大值计算的公式:
apache_max_process_with_good_perfermance < (total_hardware_memory / apache_memory_per_process ) * 2
apache_max_process = apache_max_process_with_good_perfermance * 1.5

附:
实时检测HTTPD连接数:
watch -n 1 -d "pgrep httpd|wc -l"

持久连接
一 个客户机连接到 Web 服务器时,允许客户机通过同一个 TCP 连接发出多个请求,这减少了与多个连接相关的延迟。在一个 Web 页面引用了多幅图片时,这就很有用:客户机可以通过一个连接先请求页面,再请求所有图片。其缺点在于服务器上的 worker 进程必须等待客户机要关闭的会话,之后才能转到下一个请求。
Apache 使您能够配置如何处理持久连接(称为 keepalives),httpd.conf 全局级的 KeepAlive 5 允许服务器在连接强制关闭之前处理一个连接上的 5 个请求。将此值设置为 0 将禁用持久连接。同样位于全局级上的 KeepAliveTimeout 确定在会话关闭之前,Apache 将等待另外一个连接多久。
持久连接的处理并非 “一刀切” 式的配置。对于某些 Web 站点,禁用 keepalives 更合适(KeepAlive 0);而对于其他一些站点,启用它会带来巨大的收益。惟一的解决之道就是尝试使用这两种配置,自己观察哪种更合适。但若启用了 keepalives,使用较小的超时时间较为明智,例如 2,即 KeepAliveTimeout 2。这能确保希望发出另外一个请求的客户机有充足的时间,还能确保 worker 进程不会一直空闲,等待可能永远不会出现的下一个请求。

压缩
Web 服务器能够在将输出发回给客户机之前压缩它。这将使通过 Internet 发送的页面更小,代价是 Web 服务器上的 CPU 周期。对于那些负担得起 CPU 开销的服务器来说,这是提高页面下载速度的好办法 —— 页面压缩后大小变为原来的三分之一这种事情并不罕见。
图片通常已经是压缩过的,因此压缩应仅限于文本输出。Apache 通过 mod_deflate 提供压缩。尽管 mod_deflate 可轻松启用,但它涉及到太多的复杂性,很多手册都解释了这些复杂的内容。本文不会介绍压缩的配置,但提供了相应文档的链接。

调优PHP
PHP 是运行应用程序代码的引擎。应该仅安装计划使用的那些模块,并配置您的 Web 服务器,使之仅为脚本文件(通常是以 .php 结尾的那些文件)使用 PHP,而非所有静态文件。

操作码缓存
请 求一个 PHP 脚本时,PHP 会读取该脚本,并将其编译为 Zend 操作码,这是要执行的代码的一种二进制表示形式。随后,此操作码由 PHP 执行并丢弃。操作码缓存将保存这个编译后的操作码,并在下一次调用该页面时重用它。这会节省很多时间。有多种缓存可用,我比较常用的是 eAccelerator。
要安装 eAccelerator,您的计算机上需要有 PHP 开发库。由于不同的 Linux 发布版存放文件的位置不同,所以最好直接从 eAccelerator 的 Web 站点获得安装说明(参见 参考资料部分获得链接)。您的发布版也有可能已经包含了一个操作码缓存,只需安装即可。
无论如何在系统上安装 eAccelerator,都有一些配置选项需要注意。配置文件通常是 /etc/php.d/eaccelerator.ini。eaccelerator.shm_size 定义共享高速缓存的大小,编译后的脚本就存储在这里。该值的单位是兆字节(MB)。根据您的应用程序确定恰当的大小。eAccelerator 提供了一个脚本来显示缓存的状态,其中包含内存占用,64MB 是个不错的选择(eaccelerator.shm_size="64")。如果您选择的值未被接受,那么必须修改内核的最大共享内存的大小。向 /etc/sysctl.conf 添加 kernel.shmmax=67108864,运行 sysctl -p 来使设置生效。kernel.shmmax 值的单位是字节。
如果共享内存的分配超出极限,eAccelerator 必须将旧脚本从内存中清除。默认情况下,这是被禁用的;eaccelerator.shm_ttl = "60" 指定:当 eAccelerator 用完共享内存时,60 秒内未被访问的所有脚本都将被清除。
另一种流行的 eAccelerator 替代工具是 Alternative PHP Cache(APC)。Zend 的厂商也提供了一种商业操作码缓存,包括一个进一步提高效率的优化器。

php.ini
PHP 的配置是在 php.ini 中完成的。四个重要的设置控制 PHP 可使用多少系统资源,如表 1 所列。
表 1. php.ini 中与资源相关的设置设置 描述 建议值
max_execution_time 一个脚本可使用多少 CPU 秒 30
max_input_time 一个脚本等待输入数据的时间有多长(秒) 60
memory_limit 在被取消之前,一个脚本可使用多少内存(字节) 32M
output_buffering 数据发送给客户机之前,有多少数据(字节)需要缓存 4096

转载于:https://www.cnblogs.com/moqiang02/p/4061420.html

合理设置apache的连接数及进程工作方式相关推荐

  1. 合理设置apache参数

    在/usr/local/etc/apache22/httpd.conf中加载MPM配置(去掉前面的注释): # Server-pool management (MPM specific) Includ ...

  2. Nginx源码分析:3张图看懂启动及进程工作原理

    图一:nginx 启动及内存申请过程分析 任何程序都离不开启动和配置解析.ngx 的代码离不开 ngx_cycle_s 和 ngx_pool_s 这两个核心数据结构,所以我们在启动之前先来分析下. 内 ...

  3. Apache下PHP的几种工作方式

    PHP在Apache中一共有三种工作方式:CGI模式.Apache模块DLL.FastCGI模式. 一.CGI模式 PHP 在 Apache 2中的 CGI模式.编辑Apache 配置文件httpd. ...

  4. 常规设置Apache服务器实例

    常规设置Apache服务器实例 1.设置文档根目录和首页文件的实例 [例1]默认情况下,网站的文档根目录保存在/var/www/html中,如果想把保存网站文档的根目录修改为/home/wwwroot ...

  5. mysql连接数设置_MySQL最大连接数设置

    "Can not connect to MySQL server. Too many connections"-mysql 1040错误, 这是因为访问MySQL且还未释放的连接数 ...

  6. 如何查看Apache的连接数和当前连接数

    查看Apache的连接数和当前的连接数以及IP访问次数,下面有个不错的示例,大家可以参考下,希望对大家解决问题有所帮助 查看了连接数和当前的连接数 复制代码 代码如下: netstat -ant | ...

  7. apache php日志配置,如何设置apache每天保存日志

    由于工作需求,需要设置apache日志按每天的方式保存,现在将具体方法分享出来,以供大家参考. 一.查找rotatelogs rotatelogs是apache自带的日志按日期生成的模块,具体位置已自 ...

  8. hadoop 多节点集群_设置Apache Hadoop多节点集群

    hadoop 多节点集群 我们正在分享有关在基于Linux的机器(多节点)上安装Apache Hadoop的经验. 在这里,我们还将分享我们在各种故障排除方面的经验,并在将来进行更新. 用户创建和其他 ...

  9. 设置Apache Hadoop多节点集群

    我们正在分享有关在基于Linux的机器(多节点)上安装Apache Hadoop的经验. 在这里,我们还将分享我们在各种故障排除方面的经验,并在将来进行更新. 用户创建和其他配置步骤– 我们首先在每个 ...

最新文章

  1. python爬虫怎么做毕业设计_python语言爬虫做成毕业设计的话,怎样答辩演示,或者怎样把爬虫复杂化?...
  2. python实现tcp通信_Python实现简易TCP通信程序
  3. 转 mvc项目中,解决引用jquery文件后智能提示失效的办法
  4. 关于Android中工作者线程的思考
  5. 和java通信_[源码和文档分享]基于JAVA的即时通信软件
  6. c语言字体属性,【C】 5_变量属性
  7. Spark实战电影点评系统(一)
  8. NameNode之数据块管理
  9. 拓端tecdat|R语言用极大似然和梯度下降算法估计GARCH(p)过程
  10. python 操作psd_python psd
  11. C语言·数组·密码编译(阿斯克码法)
  12. PreferenceScreen 悬浮清除按钮
  13. 如何把Excel中表格复制粘贴到PPT中,并更改表格边框颜色
  14. linux端口映射到内网机器,linux如何将公网IP映射到局域网IP?
  15. 强化学习:确定性策略梯度(DDPG)
  16. 批处理修改win10密码以及密码提示
  17. sendgrid html text,在Node.js中的SendGrid的“发件人”字段中添加名称
  18. 前途迷茫不知.NET与JAVA那个好
  19. 小红书app复制链接转换为可直接访问链接
  20. 【S2VD】S2VD半监督视频降雨方法(Semi-Supervised Video Deraining with Dynamical Rain Generator)论文学习

热门文章

  1. ajax结合接口 分页插件
  2. linux下开启dhcp服务器配置,CentOS下DHCP服务器的配置
  3. Qt文档阅读笔记-Qt 3D: Simple C++ Example解析
  4. 顺利通过2018年下工信部的软件设计师考试,在此感悟一下
  5. Qt工作笔记-对qmake的认识【两篇转载结合】
  6. C/C++获取CPU相关信息(非WMI)
  7. Java基础入门笔记-数组链表
  8. 6.6.1最优二叉树(赫夫曼树)
  9. linux中命令对c文件进行编译,Linux下C语言编译基础及makefile的编写
  10. 微服务集成cas_Spring Boot + Solr 全文检索微服务简易集成