首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当使用会话变量时,数百个Apache进程在Ajax请求后挂起

当使用会话变量时,数百个Apache进程在Ajax请求后挂起
EN

Stack Overflow用户
提问于 2011-08-17 02:04:31
回答 1查看 1.6K关注 0票数 5

在浏览器加载来自Apache服务器的PHP网页后,客户端javascript每5秒向PHP更新脚本发送一次AJAX请求。使用JSON编码的AJAX响应可能非常大,因此如果自上一次AJAX请求以来没有变化,我只想发送空数组'[]‘,或者如果自上一次AJAX请求以来有变化,则发送包含各种JSON对象的整个数组。

为了实现发送'[]‘或完整的数组,我使用了一个会话变量。我的更新脚本如下所示:

代码语言:javascript
运行
复制
<?php
session_start();
$output = '[]'; // server is running PHP 5.1 so can't use built in JSON encode
// code here queries a database and updates $output based on the query result
if (isset($_SESSION['previous_output'])) {
    if ($_SESSION['previous_output'] == $output) {
        echo '[]';
    } else {
        $_SESSION['previous_output'] = $output;
        echo $output;
    }
}
?>

在实现上述脚本后,web服务器管理员注意到创建并挂起了“太多”httpd进程,最终导致服务器完全停止。

当我删除涉及会话变量的代码时,一些httpd进程仍然挂起,但"backlog“没有那么糟糕,最终这些进程在对服务器产生明显影响之前就消失了。

web服务器的使用率并不高,在任何时候只为半打“访问者”服务。执行5秒AJAX请求的web页面是“受保护的”,这意味着一次只有一个管理员用户可以访问它。

我在PHP MySQLi Singleton for Ajax-Requests end in to many processes上发现了另一个听起来类似的帖子,它提到了AJAX推送引擎(APE)项目,我希望最终能进一步调查这个项目。然而,我现在时间和资源都很紧张(例如,不能设置一个APE服务器...),所以我不知所措,不知道该怎么做。

对于如何在不影响服务器性能的情况下完成5秒AJAX请求,有什么建议吗?为什么使用会话变量会产生如此明显的差异?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-17 02:08:16

Apache尝试维护一组空闲的工作进程来处理传入的请求。可以调整这些设置(空闲工作进程的最小数量、工作进程的最大数量-特别感兴趣的MaxRequestsPerChild,尝试降低此值)。这应该不会造成问题-假设你的脚本是正确终止的(这对于典型的web应用程序来说应该不是问题)。你可能会从serverfault community得到一个完整的答案。

此外,根据服务器负载(活跃用户数、应用程序接口使用的资源等),您可能需要扩展您的应用程序(使用亚马逊的ec2服务进行研究自动扩展)。

http://httpd.apache.org/docs/2.0/mod/worker.html

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7082825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档