fprintf是线程安全的吗? glibc手册似乎说它是,但我的应用程序,使用单个调用fprintf()写入文件似乎是混合来自不同进程的部分写入.
编辑:为了澄清,有问题的程序是一个lighttpd插件,服务器正在运行多个工作线程.
查看该文件,一些写入混合在一起.
编辑2:我看到的问题似乎可能是由于lighttpd的"工作线程"实际上是单独的进程: http://redmine.lighttpd.net/wiki/lighttpd/Docs:MultiProcessor
问题
通过在同一个套接字上运行2个或更多进程,您将获得更好的并发性,但是您必须注意一些缺点:
- mod_accesslog可能会创建损坏的访问日志,因为同一个文件打开两次并且未同步.
- mod_status将有n个独立的计数器,每个进程一个.
- mod_rrdtool将失败,因为它收到两次相同的时间戳.
- mod_uploadprogress将不会显示正确的状态.
我有一个在 AWS EC2 实例上运行的 lighttpd 服务器。它可以在端口 80(或任何其他端口,如果我更改 /etc/lighttpd/lighttpd.conf 中的 server.port)上提供服务,没有任何问题。但是,当我在不同的端口(例如 8080)上提供替代文档根目录时,浏览器永远无法连接到服务器。
我的 lighttpd.conf 文件的相关部分:
server.port = 80
##
## Use IPv6?
##
server.use-ipv6 = "disable"
##
## bind to a specific IP
##
#server.bind = "localhost"
##
## Run as a different username/groupname.
## This requires root permissions during startup.
##
server.username = "lighttpd"
server.groupname = "lighttpd"
##
## enable core files.
##
#server.core-files = "disable"
##
## Document root
##
server.document-root = server_root + "/release"
$SERVER["socket"] == ":8080" { …Run Code Online (Sandbox Code Playgroud) 我记得一个非常快速的Linux内核模块,名为"TUX",用于静态文件,以回答IIS优秀的Linux静态文件Web服务性能并解决"C10K问题".现在我一直看到:
...用于"快速静态文件服务".如果您的操作系统具有正确的功能,快速提供静态文件并不困难.从那以后,Windows已经发明了IO完成端口,重叠的I/O等.
Tux是否因为安全隐患而死亡?这是Kqueue/Epoll与Sendfile等功能相结合的实验吗?提供100%静态内容的最佳解决方案是什么 - 比如50张左右的图像包装来模拟"翻书"电影.
我理解这是"服务器相关"的问题,但它也是理论上的.如果它纯粹是静态的,那么CDN真的会变得更好吗?
对于像reddit这样的网站,有很多上/下投票和每个主题的很多评论,我该怎么办?
Lighttpd/Php或Lighttpd/CherryPy/Genshi/SQLAlchemy?
对于数据库,什么会扩展更好/最快的MySQL(4.1或5?)或PostgreSQL?
编辑(2):现在使用db-mysql和generic-pool模块.错误率显着下降,徘徊在13%,但吞吐量仍然在100 req/sec左右.
编辑(1):在有人建议ORDER BY RAND()会导致MySQL变慢之后,我从查询中删除了该子句.Node.js现在徘徊在100 req/sec左右,但服务器仍然报告"CONNECTION error:Too many connections".
你可能看到了很多"Hello World"对node.js进行基准测试......但是"hello world"测试,甚至那些每个请求延迟2秒的测试,甚至都没有接近真实世界的生产用量.我还使用node.js执行了"Hello World"测试的那些变体,并且看到吞吐量大约为800 req/sec,错误率为0.01%.但是,我决定进行一些更现实的测试.
也许我的测试不完整,很可能关于node.js或我的测试代码真的是错误的,所以如果你是node.js专家,请帮我写一些更好的测试.我的结果发表在下面.我使用Apache JMeter进行测试.
测试非常简单.用户数量的mysql查询是随机排序的.检索并显示第一个用户的用户名.mysql数据库连接是通过unix套接字.操作系统是FreeBSD 8+.8GB的RAM.Intel Xeon四核2.x Ghz处理器.在我遇到node.js之前,我稍微调整了Lighttpd配置.
线程数(用户):5000 我相信这是并发连接数
加速期(以秒为单位):1
循环次数:10 这是每个用户的请求数
Label | # Samples | Average | Min | Max | Std. Dev. | Error % | Throughput | KB/sec | Avg. Bytes HTTP Requests Lighttpd | 49918 | 2060ms | 29ms | 84790ms | 5524 | 19.47% | 583.3/sec | 211.79 | 371.8 HTTP Requests Node.js …
我在我的Windows计算机上安装lighttpd的Web服务器和我有一个问题:在PHP文件没有$_GET和$_POST变量定义.
例如,我有这个简单的脚本(tmp.php):
<?php
echo "x: '" . $_GET ['x'] . "'<br />";
?>
Run Code Online (Sandbox Code Playgroud)
当我去地址时: http://localhost/tmp.php?x=123
我收到此错误消息:
Notice: Undefined index: x in /srv/www/htdocs/tmp.php on line 3 x: ''
Run Code Online (Sandbox Code Playgroud)
当我把相同的文件放在公共托管上时,我得到:
x: '123'
Run Code Online (Sandbox Code Playgroud)
还有php命令:
empty ($_GET)
Run Code Online (Sandbox Code Playgroud)
返回true.
所有$ _POST变量都是一样的.
我的php.ini文件中是否有任何错误配置?
命令:
print_r($_SERVER);
Run Code Online (Sandbox Code Playgroud)
给出以下结果:
Array (
[SERVER_SOFTWARE] => lighttpd/1.4.20
[SERVER_NAME] => localhost
[GATEWAY_INTERFACE] => CGI/1.1
[SERVER_PROTOCOL] => HTTP/1.1
[SERVER_PORT] => 80
[SERVER_ADDR] => 0.0.0.0
[REQUEST_METHOD] => GET
[REDIRECT_STATUS] => 200
[QUERY_STRING] => x=123
[REQUEST_URI] => /tmp.php?x=123 …Run Code Online (Sandbox Code Playgroud) 我有一个托管在lighttpd上的网站,可在"www"子域访问.我还有一个聊天服务器在端口8124上侦听node.js和socket.io.
我希望所有客户端流量都发生在端口80上,方法是将所有请求重定向到"chat"子域到端口8124.所以我启用了mod_proxy并在lighttpd.conf中添加了:
$HTTP["host"] == "chat.myserver.com" {
proxy.server = (
"" => ((
"host" => "78.128.79.192",
"port" => "8124"
))
)
}
Run Code Online (Sandbox Code Playgroud)
在客户端,当我连接到websocket时,
var socket = io.connect('http://chat.myserver.com');
Run Code Online (Sandbox Code Playgroud)
我从node.js得到了正确的消息:
debug - client authorized
info - handshake authorized 6067470561567883577
debug - setting request GET /socket.io/1/websocket/6067470561567883577
debug - set heartbeat interval for client 6067470561567883577
debug - client authorized for
debug - websocket writing 1::
Run Code Online (Sandbox Code Playgroud)
但浏览器出错:
Firefox can't connect to server ws://chat.myserver.com/socket.io/1/websocket/6067470561567883577
Run Code Online (Sandbox Code Playgroud)
当然,如果我直接连接到端口8124,一切正常:
var socket = io.connect('http://www.myserver.com:8124');
Run Code Online (Sandbox Code Playgroud)
但是,正如我所说,我希望所有客户端流量都在端口80上.它是否可能?
我有一个指向文档根的lighttpd-Setup /var/www.但是,我希望URL other/指向/some/other/dir.我正在使用以下配置:
$HTTP["url"] =~ "^/other($|/)" {
server.document-root = "/some/other/dir"
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我访问'http:// myhost/other',则lighttpd会尝试访问/some/other/dir/other而不是仅仅访问/some/other/dir.有可能以某种方式剥离/other但保留任何进一步的URL段吗?所以,例如,http://myhost/other/sub/foo.txt应该指出/some/other/dir/sub/foo.txt.
好吧,我想知道在Ubuntu上是否可以在Lighty上运行rails和PHP.我想在一个服务器/域上运行我的PHP项目和Rails项目.
我对Linux的经验很少,所以请原谅我的天真.
如果这是一种方式,请让我知道:)
可能重复:
我从未真正理解:什么是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)