将 FastCGI 用于高负载 Web 服务器的最佳实践
我有一个网络服务器,唯一的任务是运行图像处理。
Web 服务器上的图像处理加载相同的 XML 设置文件(最多 2MB)。
为了节省每个请求的 XML 文件加载时间,我使用以下架构:
- Web 服务器是带有 MPM prefork 的 Apache (2.2.16) 和带有图像处理应用程序 (C++) 的 FastCGI (fcgi_mod)。
调用的图像处理应用程序加载 XML 文件并生成 N 个线程,每个线程运行:
thread_func()
{
FCGX_InitRequest
而(真)
{
FCGX_Accept_r
请求(图像)处理和 FCGX_FPrintF/FCGX_PutStr
FCGX_Finish_r
}
}
的弱点之一是每个 Apache 进程中最多有一个线程在 FCGX_Accept_r 和 FCGX_Finish_r 调用之间执行其工作。那么每个进程(单线程)1 线程仅是否值得,但增加 MaxClients 呢?
先感谢您 :)
I have a web server that sole task is to run images processing.
The image processing on the web server loads the same XML settings file (up to 2MB).
To save XML file loading time for every request I use follow architecture:
- The web server is Apache (2.2.16) with MPM prefork and FastCGI (fcgi_mod) with image processing application (C++).
Invoked image processing application loads the XML file and spawns N threads and each thread runs:
thread_func()
{
FCGX_InitRequest
while(true)
{
FCGX_Accept_r
Request (image) processing and FCGX_FPrintF/FCGX_PutStr
FCGX_Finish_r
}
}
One of the weakness of this model is that at most one thread in each Apache process will do its work while being between FCGX_Accept_r and FCGX_Finish_r calls. Does it worth then to have 1 thread only per process (single thread), but to increase the MaxClients ?
Thank you in advance :)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用 fastcgi 模块,它允许每个进程有多个线程
you can use the fastcgi module, it's allow more than one thread per process