- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚开始了解 apache 服务器的工作原理,前几天我在编写一个非常简单的网页并显示页面点击计数时遇到了问题:
/* The simplest HelloWorld module */
#include <httpd.h>
#include <http_protocol.h>
#include <http_config.h>
static int noOfViews = 0;
static int helloworld_handler(request_rec *r)
{
if (!r->handler || strcmp(r->handler, "helloworld")) {
return DECLINED;
}
if (r->method_number != M_GET) {
return HTTP_METHOD_NOT_ALLOWED;
}
noOfViews++;
ap_set_content_type(r, "text/html;charset=ascii");
ap_rputs("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n",
r);
ap_rputs("<html><head><title>Apache HelloWorld "
"Module</title></head>", r);
ap_rputs("<body><h1>Hello World!</h1>", r);
ap_rputs("<p>This is the Apache HelloWorld module!</p>", r);
ap_rprintf(r, "<p>Views: %d</p>", noOfViews);
ap_rputs("</body></html>", r);
return OK;
}
static void helloworld_hooks(apr_pool_t *pool)
{
ap_hook_handler(helloworld_handler, NULL, NULL, APR_HOOK_MIDDLE);
}
module AP_MODULE_DECLARE_DATA helloworld_module = {
STANDARD20_MODULE_STUFF,
NULL,
NULL,
NULL,
NULL,
NULL,
helloworld_hooks
};
基本上发生的事情是,当我刷新页面时,点击计数器会上升,但有时它的数量会随机下降。有人告诉我这是因为 Apache Prefork MPM 的工作方式。读完本文后:
http://httpd.apache.org/docs/2.0/mod/prefork.html
我更了解这个问题,但我仍然不能 100% 确定发生了什么。因此,prefork MPM 创建了一堆子进程,其中一些处于空闲状态,并等待客户端连接,因此当我刷新页面时,我实际上正在连接到服务器正在运行的一堆不同的子进程。然而,这个模块可以同时保持的子进程数量有限,所以有时当它杀死一个进程时,我的计数器会下降。我不完全确定这个解释是否正确或计数器下降的确切原因。
感谢所有建议。
最佳答案
是的,要么这样,要么当计数器下降时,您可以让其他 Apache 进程之一为您提供请求。
您可以尝试以这样的方式配置 Apache,使其仅生成 1 个永远存在的子进程,但这样做会限制 Apache 的功能。
我建议您尝试让您的模块完全无状态。如果您需要点击计数器,请将状态保存在文件或数据库中,并在需要时从那里检索它。您甚至可以与另一个进程对话,该进程的命中计数器仅位于静态变量中,就像您目前的模块一样。
关于c - Apache Prefork/Worker MPM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8360500/
Apache 2.X 支持插入式并行处理模块,称为多路处理模块(MPM)。在编译apache时必须选择也只能选择一个MPM,对类UNIX系统,有几个不同的MPM可供选择,它们会影响到ap
我正在编写一些在 Apache 的 MPM prefork 服务器上建模的 Python 代码。我更像是一名应用程序程序员而不是网络程序员,自从我阅读 Stevens 以来已经有 10 年了,所以我正
我是 python 的新手,正在使用 pythons SocketServer.ForkingTCPServer 创建一个需要连接到数据库 (mysql) 的网络脚本。我预计程序每秒会被命中 30 -
查看 Apache 配置文件,我看到 Prefork 和 Worker MPM 已定义。有什么区别?Apache 使用的是哪一种? 最佳答案 Prefork 和worker 是apache 提供的两种
我刚刚开始了解 apache 服务器的工作原理,前几天我在编写一个非常简单的网页并显示页面点击计数时遇到了问题: /* The simplest HelloWorld module */ #inclu
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
我的服务器环境:centos 6.4,带有 prefork 模块的 apache2.2,带有模块 5.c 的 php 5.3。 我有 10 个由 apache 运行的虚拟主机,我想分离这 10 个站点
首先,我对以Django为基础的网站的性能丝毫不满意,它的访问量并没有增加,到目前为止,每天的访问量超过1000。 我很好奇它如何应付繁忙的交通高峰,所以我使用了ab工具进行一些基准测试。 我注意到并
我有一个用 perl/Mojolicious 编写的简单 Web 应用程序,并在 hypnotoad 下运行。 我需要为“spawn”事件定义一些处理程序(由Mojo::Server::Prefork
我不知道如何让 spork 不加载我所有的应用程序模型。由于我无法使用 spork 来帮助测试对我的模型的更改,因此速度大大减慢。这是我在调试正在加载的 spork 时得到的: - Spork
我正在尝试使用 Chef Solo 在 Vagrant 盒子(Ubuntu 14.04)中安装 apache2 和 php。这是我的 Recipe : include_recipe "apache2"
我有一些代码,我希望输出为 1 和 6,但它会无限输出 1。 use v5.10; use Parallel::Prefork; use List::MoreUtils qw( natatime );
我需要将 MPM prefork 模块更改为worker,但它在我的 Debian 9.1 上不起作用。当我启用工作模块时,PHP 无法工作。我无法重新启用 php7.0 模块。 这是控制台的输出:
摘要/问题: 我使用 Prefork MPM 运行 Apache,运行 php。我正在尝试使用 Apache mod_proxy 创建一个反向代理,我可以通过它重新路由我的请求,以便我可以使用 Apa
如何在 Apache 2.4、Debian 8 上将 MPM Prefork 切换为 Event?我已经安装了 php-7 和 php-fpm,但是找不到关于将 MPM Prefork 切换到 Eve
我正在尝试使用 WSGI 在 Apache(prefork)中运行 Python 应用程序,以便使用单个 Python 解释器。这是必要的,因为应用程序使用线程同步来防止发生竞争条件。由于 Apach
我最近从源代码安装了 Apache/2.4.6。目前启用的MPM模块是mpm_event_module。我想启用 prefork mpm,但不确定从哪里执行此操作。我知道如果使用 yum 安装 apa
我坐下来阅读 Apache's MPM prefork.c并且此代码使用名为 accept_mutex 的变量来防止多个线程调用 accept()。这很奇怪,因为据我所知accept() is thr
我有 3 个远程工作人员,每个工作人员都使用默认池(prefork)和单个任务运行。 单个任务需要 2 到 5 分钟才能完成,因为它在许多不同的工具上运行并在 ELK 中插入数据库。 worker 命
可用的不同 apache 包之间有什么区别。 Apache 2 apache2 线程开发 apache2-prefork-dev 将 sudo apt-get install apache2 将同时支
我是一名优秀的程序员,十分优秀!