我有一个运行Apache和MYSQL的Ubuntu服务器机器。 系统和版本信息如下:Linux kernel 3.0.0.-12 Apache / 2.2.20 MySQL Ver 14.14.Distrib 5.1.58
我正在运行这个服务器上的一些网站,只有一些HTML,一些PHP / MySQL。 问题是响应时间非常缓慢,无论是静态还是dynamic网站。 有时需要10秒钟才能得到响应,这使网站非常缓慢,几乎无法使用。
即使从本地networking请求,也会出现此问题。 我已经将涉及到的子域添加到我的/ etc / hosts文件中,并且解决了所有的问题都不是通过使用IP编号而是使用IP编号解决的。 所以没有DNS查询问题。
我已经通过显示响应时间修改了日志格式,有时一个文件需要12秒钟才能提供,请参阅示例屏幕截图中的jquery〜.js文件。
我对这个非常长的响应时间没有任何解释,但是这里甚至不是唯一的问题,其他一些文件也需要很长时间才能提供,但是在日志文件中不会显示很长的响应时间。
所以这里可能涉及不同的组织。 我找不到解决scheme,直到现在,任何build议? THanx提前,Klaas
链接到来自访问日志文件的截图图片
一些额外的configuration信息:
apache2.conf(注释已删除)
LockFile ${APACHE_LOCK_DIR}/accept.lock PidFile ${APACHE_PID_FILE} Timeout 300 KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 5 <IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 0 </IfModule> <IfModule mpm_worker_module> StartServers 2 MinSpareThreads 25 MaxSpareThreads 75 ThreadLimit 64 ThreadsPerChild 25 MaxClients 150 MaxRequestsPerChild 0 </IfModule> <IfModule mpm_event_module> StartServers 2 MinSpareThreads 25 MaxSpareThreads 75 ThreadLimit 64 ThreadsPerChild 25 MaxClients 150 MaxRequestsPerChild 0 </IfModule> User ${APACHE_RUN_USER} Group ${APACHE_RUN_GROUP} AccessFileName .htaccess <Files ~ "^\.ht"> Order allow,deny Deny from all Satisfy all </Files> DefaultType text/plain HostnameLookups Off ErrorLog ${APACHE_LOG_DIR}/error.log LogLevel warn Include mods-enabled/*.load Include mods-enabled/*.conf Include httpd.conf Include ports.conf LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\" %T/%D" combined LogFormat "%h %l %u %t \"%r\" %>s %O" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent Include conf.d/ Include sites-enabled/
而其中一个慢速网站的虚拟主机文件,其实这是非常简单的…
<VirtualHost *:80> ServerAdmin [email protected] ServerSignature EMail ServerName toenjoy.drsklaus.nl DocumentRoot /var/www/toenjoy.drsklaus.nl <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/toenjoy.drsklaus.nl/> Options Indexes FollowSymLinks MultiViews AllowOverride AuthConfig AuthType Basic AuthName "To Enjoy" AuthUserFile /etc/.htpasswd Require user petraaa Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog /var/log/apache2/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /var/log/apache2/access.log combined Alias /doc/ "/usr/share/doc/" <Directory "/usr/share/doc/"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0 ::1/128 </Directory> </VirtualHost>
而free -m的输出:
klaas@ubuntu-server:/etc/apache2$ free -m total used free shared buffers cached Mem: 1997 1401 595 0 144 1017 -/+ buffers/cache: 238 1758 Swap: 2035 0 2035
而且我也没有迹象表明在网站速度慢的时候会发生交换。 我跑了顶,它似乎不是一个CPU问题。 我有一个印象,apache线程的产卵可能是瓶颈,但这只是一个build议。 也许这给了一些额外的信息!
编辑:问题似乎已经消失了一段时间,但再次发生! 而且,不仅对于Apache来说,使用SSH进行连接也需要花费大量的时间,有时在keyphrase被要求前需要15秒。 而且scp工作得很慢。 行为真的是不可能的,使服务器很难使用。 有任何想法吗…?
当您尝试通过lynx或curl从本地主机或networking上的机器时会发生什么?
另外,从Apache看这个块:
Alias /doc/ "/usr/share/doc/" <Directory "/usr/share/doc/"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0 ::1/128 </Directory>
我会build议摆脱整个块,重新启动Apache&再次尝试。 当Apache对本地主机或本地IP地址进行一些deny操作时,我也有奇怪的挂起。 奇怪的DNS查询问题可能会在每个请求的基础上挂起Apache。 而每页12秒的延迟使我认为这是原因。 但是,如果我指出的块是罪魁祸首,那么从configuration中不会100%清楚。 但是做一些连接到Apache的DNS查找相关任务的search。
此外,很难说什么设置应该在您的服务器上没有观察您的网站真正的stream量,但我build议您的KeepAlive设置似乎资源沉重。 我会build议改变如下:
KeepAlive On MaxKeepAliveRequests 50 KeepAliveTimeout 2
我还build议降低MaxClients并添加ServerLimit调整MaxRequestsPerChild以及在您的主要apache2.conf像这样:
<IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 ServerLimit 90 MaxClients 90 MaxRequestsPerChild 2000 </IfModule> <IfModule mpm_worker_module> StartServers 2 MinSpareThreads 25 MaxSpareThreads 64 ThreadLimit 64 ThreadsPerChild 25 ServerLimit 90 MaxClients 90 MaxRequestsPerChild 2000 </IfModule> <IfModule mpm_event_module> StartServers 2 MinSpareThreads 25 MaxSpareThreads 64 ThreadLimit 64 ThreadsPerChild 25 ServerLimit 90 MaxClients 90 MaxRequestsPerChild 2000 </IfModule>
另外,我强烈build议在您的机器上安装Munin以掌握资源使用情况。 节省了很多头痛的东西,并给予了广泛的视angular。
Apache是一个复杂的野兽,可能是这里的问题,也可能不是。 在进入那个黑洞之前,我会开始debugging一般的networking缓慢。 特别:
尝试在端口上以服务器模式运行netcat,configuration为分发本地文件的内容,然后从机器本身连接到该文件。 例如:
而真实的; 做nc -l 80 <index.html; DONE
这消除了Apache,物理networking和DNS或IP链接问题。 请注意,所提供的文件是本地的 – 例如,没有NFS挂载。
如果你得到这么多,你的服务器是好的,你的networking路由也可以。
现在清理DNS,并确保反向查找工作。 挖4.3.2.1.in-addr.arpa例如来testing1.2.3.4地址的查找。 如果速度很慢,那就是一个问题,你需要用/etc/resolv.conf,dnsmasq或者其他任何东西。 不要继续下去,直到坚如磐石。 值得尝试的SSH / SCP在这一点 – 也应该是快。
接下来,Apache。 如果你做到这一点,你知道你的networking是好的,DNS的工作和框是好的。 这样就会留下你的应用程序(即www服务器)。 尝试剥离configuration到最低限度,看看你如何。 例如这里是一个。
祝你好运!
编辑:一次尝试这些!
有几件事情会跳出来:
MaxRequestsPerChild 0
如果你没有理由使用0 ( 进程永远不会死 ),然后增加一点(默认是1000 ),说100并重新启动,看看是否得到你的改善。 可以防止内存泄漏。
MaxClients 150
根据您的服务器有多less内存,并且如果同时调用这三个模块,则可能会导致内存不足。 例如,如果你的apache进程是20MB大小,你将有150个客户端x 20MB x 3 mods = 9000 MB〜8.8 GB。 即使只有其中一个被叫,那么你使用了〜2.9 GB。
如果你没有使用所有的三个mod,从你的apache实例中卸载不需要的。
另外,在这个性能下降的情况下, top和free -m的输出如何呢?