Apache 性能最优化分析(4)

apache|性能|优化

 但这种实现会引起严重的饥饿问题。由于多个子进程同时执行这个循环,它们将在select中阻塞。当任何socket上出现一个请求时,所有被阻塞的进程将复苏,并从select返回(苏醒进程的数量取决于操作系统和时间)。它们将继续执行并试图接受这个连接,但只有一个进程会成功(假设目前仍只有一个连接),其余进程将阻塞在accept中。这将把所有失败的进程锁定,使它们只为一个socket上的请求服务。它们会一直被阻塞,直到在那个socket上出现足够的请求把它们唤醒。这一饥饿问题首先在PR#467被提出。至少有两种解决它的方法。

  一种方案是使用非阻塞的socket。这种情况下,accept不会阻塞子进程,它们将会立即返回。但这种方案会造成CPU时间的浪费。假设有十个在select中的空闲进程,而后到来了一个连接请求。九个进程将苏醒、试图接受连接、失败,并返回select,这些进程实际什么都没做。而且如果在这期间,其他socket上出现请求,没有哪个进程会为它服务。总而言之,这种方案不是十分有效,除非您拥有和空闲子进程数目相当的CPU--恐怕不切实际。

  另一种方案被Apache采纳。这种方案串行化(serialize)对内层循环的调用。代码如下所示(改进的部分被加粗显示):

for (;;) {
accept_mutex_on ();
for (;;) {
fd_set accept_fds;

FD_ZERO (&accept_fds);
for (i = first_socket; i <= last_socket; ++i) {
FD_SET (i, &accept_fds);
}
rc = select (last_socket+1, &accept_fds, NULL, NULL, NULL);
if (rc < 1) continue;
new_connection = -1;
for (i = first_socket; i <= last_socket; ++i) {
if (FD_ISSET (i, &accept_fds)) {
new_connection = accept (i, NULL, NULL);
if (new_connection != -1) break;
}
}
if (new_connection != -1) break;
}
accept_mutex_off ();
process the new_connection;
}
 
accept_mutex_on和accept_mutex_off 两个函数实现了互斥量(mutual exclusion semaphore),在任意时刻只能有一个子进程拥有互斥量。多种方法可以实现互斥量。在src/conf.h(1.3版之前)或src/include/ap_config.h(1.3版及以后)可以作出以下选择。一些系统不提供任何互斥方法。在这些系统上使用多个Listen命令是不保险的。

时间: 2024-05-17 06:24:43

Apache 性能最优化分析(4)的相关文章

Docker最新安全性能调整分析

本文讲的是Docker最新安全性能调整分析,[编者的话]作者通过对Docker的最新安全更新的深入分析与探索,总结了四条有关Docker安全更新的调整建议,包括调整能力.调整SELinux的标签.多级安全模式.调整命名空间. 自我发表前两篇有关Docker安全系列的文章之后,至今已有一段时间.本文更新了自那以后有关Docker的新增内容,并且介绍了全新功能,其中涵盖了与上游Docker的合并过程. 调整能力 在前面的文章中,我介绍了基于Linux功能的容器分离. 借助Linux功能,你可以分离根

list 、set 、map 粗浅性能对比分析

 list .set .map 粗浅性能对比分析   不知道有多少同学和我一样,工作五年了还没有仔细看过list.set的源码,一直停留在老师教导的:"LinkedList插入性能比ArrayList好,LinkedList顺序遍历性能比ArrayList好"的世界里.可是真是如此么?本文很"肤浅"的对比和分析了几种常用的集合,"高手"可以就此打住不必往下阅读了... 本文分开介绍了List.Map.Set: (测试环境:win7.jdk.4G.

DRDS实例性能评估分析

一.DRDS实例性能评估分析目标 通常我们在分布式数据库选项过程中会对DRDS实例进行性能评估分析,我认为主要包含以下3个目的: 1.评估DRDS性能,判断DRDS是否满足预期的性能需求 2.获取DRDS性能容量及各负载条件下性能表现,为容量规划提供参考依据 3.定位诊断DRDS性能瓶颈及原因并调整优化   二.性能评估分析主要性能指标   1.资源指标: CPU 利用率:DRDS 服务节点的CPU资源平均利用率 网络输入流量:DRDS 服务节点的网络输入流量的总和 网络输出流量:DRDS 服务

Apache 服务器Log分析应用实例

apache|服务器|应用实例 Apache 服务器Log分析应用实例 rhinux 发表于: 2004-11-28 22:11 互联网的飞速发展,无论是传统企业的网站,还是互联网企业,为了了解自己的客户来源,点击率等资料,对网站日志的分析尤为重要,以下就本人所做的日志分析系统与大家分享,希望能对大家有所帮助. 欢迎大家复制,但请大家保留本文的完整,谢谢!! 一,所用软件及工具 1,Apache服务器 官方网址:http://www.apache.org 2,awstats 日志分析软件 官方网

BSD上Apache性能的调整

apache|性能 在每个文件中,搜寻: 将5修改为任何可以工作的值即可.经测试调整到32是不会有什么问题的.修改后,重新编译kernel和Apache Server然后重新启动. FreeBSD 2.1在SOMAXCONN设置为32时工作的非常好. 如果正运行着一个非常繁忙的BSD Apache服务器并且系统的反应很慢,那么如下工作将很有用处: 运行vmstat检查内存使用情况.page/swap利用率等:运行netstat -m检查mbuf使用情况:运行fstat检查文件描述符使用情况:这些

25个Apache性能优化技巧

开发人员都知道Apache 一直是稳坐web服务器领域的霸主地位,本文主要介绍让Apache性能显著提升的25个优化技巧,下面跟小编一起来学习一下! Apache 部分: 1. 移除不用的模块. 2. 使用 mod_disk_cache NOT mod_mem_cache . 3. 扁平架构配置mod_disk_cache. 4. 安装恰当的Expires, Etag, 和 Cache-Control Headers . 5. 将缓存放在独立的磁盘 6. 使用管道日志替代直接记录 7. 将日志放

用win7性能监视器分析电脑为什么卡

平常我们电脑卡的时候,第一个想到的通常是360安全卫士各种清理.而使用电脑比较久的人,是通过任务管理器来清理一些比较占内存的程序,但是如果你能通过使用win7自带的性能检测器,那么你将看得更直观. 1 我们可以通过在运行里面输入"perfmon"来进入性能检测器. 2 性能管理器的功能是很强大的.里面有CPU.内存.磁盘.网络等功能. 在这里我们可以详细的看到哪些东西最占网络,那么最占内存.以后当我们启动这些软件的时候,自己心里清楚该怎么做. 3 在性能管理器里面,小编最喜欢的是它的日

php中file_get_contents与curl性能比较分析_php技巧

本文实例讲述了php中file_get_contents与curl性能比较分析.分享给大家供大家参考.具体如下: 在php中如果不仔细的去分析性能会发现file_get_contents与curl两个同很多共同点的,他们都可以采集文件打开文件,但是如果仔细一对比会发现很多不同点,下面我们一起来看看file_get_contents与curl区别. PHP中fopen,file_get_contents,curl函数的区别: 1.fopen /file_get_contents 每次请求都会重新做

一条insert语句导致的性能问题分析(二)

今天对之前描述的问题一条insert语句导致的性能问题分析(一) 进行了进一步的补充. 有一条insert语句的主要性能瓶颈在于insert子句中的查询语句,查询中的主要资源消耗在于对两个表进行了多次关联 语句主要的结构如下: insert into xxxxx   (select * from TEST_vip_new minus select * from TEST_vip_new_bak         ) a left join TEST_vip_new_bak b         on