在OSX上的NGINX – performance非常慢

我一直试图让我的OSX 10.7 Lion电脑上运行NGINX。 我有它运行,但每一个简单的HTML页面需要很长的时间来加载; 例如:

<html> <body> test </body> </html> 

同样的事情发生在PHP:

 <?php echo('hi'); ?> 

如果我点击刷新,它似乎几乎重build整个页面,然后呈现并创build某种对象。 只是痛苦缓慢..

这似乎是最频繁的,如果我做一些编码,然后回去刷新页面。 (10-20 +秒然后回头刷新一个页面需要4-6秒)..几乎看起来,一旦空闲需要一段时间才能重新唤醒。

我正在拉我的头发,试图理解正在发生的事情,希望有人能为我揭示一些事情。

系统configuration:

  • OS:OSX 10.7.2

  • 处理器:2 x 2.66 GHZ双核Intel Xeon

  • 内存:8GB 667 MHz

Nginx版本:1.0.11

PHP版本:5.3.9

我已经安装了一个干净的OSX格式(我认为最初是我的错误,可惜它不是)。

更新

在更新我的error_log文件以包含debugging每个福克斯的build议在评论中,我现在看到下面的消息出现在我的error_log:

 2012/01/23 11:57:02 [info] 88015#0: *26 client closed prematurely connection while reading client request line, client: 127.0.0.1, server: sandbox.local 

更新二

在使用chrome进行检查时,我发现似乎DNSparsing需要一些? 在这里输入图像描述

更新三 – 已解决

更新后两个固定的/ etc / hosts文件使用:

127.0.0.1 sandbox.local

:: 1 sandbox.local

感谢@thinice,我能够通过strace,注意到所有直接从telnet到localhost的请求都是即时的。 然后提示DNS检查,最后导致发现这个!

OSX / etc / hosts错误

我不确定这是否是一个nginx错误; 因为当我以前有appache安装这是工作得很好。

============

这是我的configuration文件:

NGINXconfiguration

 user petrogad staff; worker_processes 2; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; pid /usr/local/ngnix/var/run/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type text/plain; server_tokens off; sendfile on; tcp_nopush on; keepalive_timeout 10; # gzip on; # gzip_comp_level 2; # gzip_proxied any; # gzip_types text/plain text/css text/javascript application/json application/x-javascript text/xml application/xml application/xml+rss; index index.html index.php; include /usr/local/ngnix/conf/sites-enabled/*.link; } 

服务器configuration

 { listen 80; server_name sandbox.local; root /www/sandbox; access_log /Users/petrogad/logs/ngnix-sites/sandbox_log.txt; error_log /Users/petrogad/logs/ngnix-sites/sandbox_log.txt; location / { # First attempt to serve request as file, then # as directory, then fall back to index.html try_files $uri $uri/ /index.html; autoindex on; } include /usr/local/ngnix/conf/php.conf; } 

PHP包含

 fastcgi_intercept_errors on; location ~ \.php$ { #fastcgi_intercept_errors on; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param SCRIPT_FILENAME $request_filename; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; fastcgi_read_timeout 60; # Set fairly high for debugging fastcgi_pass 127.0.0.1:9001; # Non-default port fastcgi_index index.php; } 

快速的CGIconfiguration

 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; # PHP only, required if PHP was built with --enable-force-cgi-redirect fastcgi_param REDIRECT_STATUS 200; 

PHP-FPMconfiguration

 [global] pid = /usr/local/php-5.3.9/var/run/php-fpm.pid daemonize = yes [www] listen = 127.0.0.1:9001 user = petrogad group = staff pm = dynamic pm.max_children = 10 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 10 pm.max_requests = 500 

尝试使用以下nginxconfiguration的简单解决scheme,结果与上面相同:

 user petrogad staff; worker_processes 2; pid /usr/local/ngnix/var/run/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type text/plain; server_tokens off; sendfile on; tcp_nopush off; keepalive_timeout 0; index index.html; server { listen 80; server_name sandbox.local; root /www/sandbox; access_log /Users/petrogad/logs/ngnix-sites/sandbox_log.txt; error_log /Users/petrogad/logs/ngnix-sites/sandbox_log.txt; location / { autoindex on; } } } 

首先剥去所有不必要的configuration选项。

将设置设置为“仅用于HTML文件的默认configuration”。 删除优化。

慢慢地开始添加几个方面,重新启动你的堆栈和testing。

如果你感觉雄心勃勃,你可以在单个服务器上运行strace来获得计时。 看看这个崩溃的过程 。