我正在开发一个支持lighttpd的CherryPy FastCGI服务器,其设置如下,以便在CherryPy控制器中使用ORM SQLAlchemy会话.然而,当我运行压力测试与约500回路14个并发请求,它开始给错误,如AttributeError: '_ThreadData' object has no attribute 'scoped_session_class'在open_dbsession()或AttributeError: 'Request' object has no attribute 'scoped_session_class'在close_dbsession()一段时间后.错误率总共约为50%.
只有当我在lighttpd后面运行服务器时才会发生这种情况,而不是直接运行时cherrypy.engine.start().确认connect()不会引发异常.
我也尝试将scoped_sessionto 的返回值赋予GlobalSession(就像在这里一样),但是它给出了错误UnboundExceptionError和其他SA级错误.(并发:10,循环:1000,错误率:16%.即使直接运行也会发生.)
有一些可能的原因,但我缺乏足够的知识来选择一个.
1. start_thread在FastCGI环境下订阅是否不可靠?它似乎open_dbsession()在之前被调用connect()
2.是否cherrypy.thread_data因某种原因被清除?
import sqlalchemy as sa
from sqlalchemy.orm import session_maker, scoped_session
engine = sa.create_engine(dburi, strategy="threadlocal")
GlobalSession = session_maker(bind=engine, transactional=False)
def connect(thread_index):
cherrypy.thread_data.scoped_session_class = scoped_session(GlobalSession)
def open_dbsession():
cherrypy.request.scoped_session_class = cherrypy.thread_data.scoped_session_class
def close_dbsession():
cherrypy.request.scoped_session_class.remove()
cherrypy.tools.dbsession_open …Run Code Online (Sandbox Code Playgroud) 我使用lighty for windows,是的,我知道它不是linux,但atm只能承受本地主机,这使我可以做很多学习和练习我的网络技能.
我知道fast-cgi,在Windows上不起作用,但我想知道还有什么其他方法来提高性能?
此外,我想知道如何隐藏所有那些出现的lightpd.exe窗口/盒子,每次任何人或机器人访问该网站...可以从后台运行lighttpd吗?我正在运行它作为服务,这很好......
但总而言之,为什么窗户上轻微的支持呢?
我真的可以少关心另外一个关于为什么一切都应该在linux或windows上的讲座......这个讨论真的是浪费时间......我和你的...
如果您有一些有用的信息,我肯定希望听到它.
我想我是其中一个人,他们总是想学习如何改进事物,这对我来说就像一种药物,在性能上勉强消耗掉任何百分比......
例如,我添加了一个子域名,因为yslow喜欢子域托管图像,css和javascript ...
我真的很喜欢轻盈,只希望我不是那里唯一一个......在Windows上使用它...而且所有窗户网站的灯都似乎已经死了......或者被遗忘......
感谢您的时间..
-Craig
我在Linux上使用fcgi和Lighttpd运行Django.每隔一段时间(大约每天一次)服务器就会死掉.我正在使用Django,Python和Lighttpd的最新稳定版本.
我唯一能想到的是我的程序打开了很多文件并执行了很多外部进程,但我很确定这方面的内容是不漏水的.
查看错误和访问日志,没有任何异常情况发生(即负载不高于正常值).在那些我有Python例外的情况下,这些已经出现在error.log中,但是当这次崩溃发生时,我什么也得不到.
有没有办法找出这个过程为何死亡?没有将记录语句放在每一行上?显然我无法重现这一点,所以我不确切知道在哪里看.
编辑
这是django过程即将消亡.我正在运行服务器manage.py runfcgi daemonize=true method=threaded host=127.0.0.1 port=12345
mojolicious在lighttpd网络服务器下工作吗?怎么配置?我需要设置FastCGI吗?这是我第一次使用lighttpd.
我在所有Magento安装中都使用Apache.我想知道我是否应该开始使用Lighttpd或Nginx来提高性能.你怎么看?
编辑1
我见过:
nginx:http: //www.magentocommerce.com/wiki/1_-_installation_and_configuration/configuring_nginx_for_magento
lighttpd:http://www.magentocommerce.com/wiki/1_-_installation_and_configuration/installing-with-lighttpd-and-fastcgi
我在node.js写了一个网站并表达了.现在我配置lighttpd以使用带有子目录的node.js服务器:
$HTTP["url"] =~ "^/app/" {
proxy.server = ( "" => ( (
"host" => "127.0.0.1",
"port" => 3000
) )
)
}
Run Code Online (Sandbox Code Playgroud)
当我打开时,http://localhost/app/我得到错误404,因为我写了这样的东西:
app.get('/', function (req, res){
res.render('index');
});
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来修改这些行,如:
var relPath = '/app';
app.get(relPath + '/', function (req, res){
res.render('index');
});
Run Code Online (Sandbox Code Playgroud)
?
可能重复:
我从未真正理解:什么是CGI?
在lighttpd配置中,我们定义了两个路径(如下所示),其中一个是PHP的二进制文件,另一个是套接字路径.我的问题是,lighttpd在哪一点上获取PHP创建的最终HTML输出?二进制文件是否将输出作为响应提供给lighttpd?或者它是否在另一个地方创建临时文件并且服务器获取它?
fastcgi.server = ( ".php" => ((
"bin-path" => "/usr/bin/php-cgi",
"socket" => "/tmp/php.socket"
)))
Run Code Online (Sandbox Code Playgroud) 我使用FastCGI运行Lighttpd网络服务器,网络服务器不输出PHP解析错误.
我的php.ini文件有以下设置:
error_reporting = E_ALL
display_errors = Off
display_startup_errors = Off
log_errors = On
html_errors = On
Run Code Online (Sandbox Code Playgroud)
我在我的PHP脚本中启用错误输出以进行开发(对于其他环境具有冗余):
error_reporting( E_ALL );
ini_set( 'display_errors', 1 );
ini_set( 'html_errors', 'On' );
Run Code Online (Sandbox Code Playgroud)
大多数错误输出正常.解析错误没有.下面是抛出解析错误的示例代码.Lighttpd网络服务器不输出错误,但是从命令行执行时,因为它没有使用FastCGI.(注意缺少的连接运算符):
<?php echo 'foo' 'bar'; ?>
Run Code Online (Sandbox Code Playgroud)
我发现如果我display_errors = On在php.ini中设置然后使用FastCGI和Lighttpd正确解析错误输出,但是我不能在我的PHP脚本中使用它来关闭它们ini_set( 'display_errors', 0 ).
我希望能够在开发它时在我的应用程序中显示这些,并且能够在不更改php.ini配置的情况下关闭它们进行生产.使用FastCGI时,我的PHP应用程序中无法执行此操作吗?
我需要在lighttpd上设置代理/重写!
我有server1,它通过http 2不同的web应用程序路径提供服务:
* http://server1/path1
* http://server1/path2
Run Code Online (Sandbox Code Playgroud)
另外,我在server1前面有lighttpd服务器
我想在lighttpd上设置重写和/或代理,以便2条路径中的每条路径都可以作为不同域上的根路径:
* requests to http://server2.com/* are proxied/rewrited to http://server1/path1/*
* requests to http://server3.com/* are proxied/rewrited to http://server1/path2/*
Run Code Online (Sandbox Code Playgroud)
重要:
可能吗?
有没有办法阻止 lighttpd 将 POST 缓冲到 CGI 可执行文件?
在我看来,所有请求在转发到 CGI 可执行文件之前都已完全缓冲在磁盘上,这使我无法以基于流的方式处理输入。
澄清一下,我只是在谈论转发到标准输入上的 CGI 可执行文件的请求;我已经验证了响应没有像那样缓冲,并且流输出确实是可能的。