У меня есть сервер Ubuntu с Apache и MYSQL. Информация о системе и версии выглядит следующим образом: ядро Linux 3.0.0.-12 Apache / 2.2.20 MySQL Ver 14.14.Distrib 5.1.58
У меня есть несколько веб-сайтов на этом сервере, некоторые только HTML, некоторые PHP / MySQL. [Проблема в том, что время отклика очень медленное, как на статических, так и на динамических сайтах. Иногда на получение ответа уходит более 10 секунд, что делает сайты очень медленными и почти непригодными для использования.
Проблема возникает даже при запросе из локальной сети. Я добавил задействованные поддомены в свой файл / etc / hosts, и устраню все проблемы, которые не решаются с помощью IP-адресов вместо URL-адресов. Таким образом, нет проблем с поиском DNS.
Я изменил формат журнала, указав время отклика, и иногда для обслуживания файлов требуется 12 секунд, см. Файл jquery ~ .js на снимке экрана примера.
У меня нет объяснения такому чрезвычайно долгому времени отклика, но это даже не единственная проблема, некоторые другие файлы тоже обслуживаются долго, но не показывают долгое время отклика в файле журнала.
Так что, вероятно, здесь задействованы разные ткани. Я не могу найти решение до сих пор, есть предложения ??? Спасибо заранее, Клаас
ссылка на снимок экрана из файла журнала доступа
Некоторая дополнительная информация о конфигурации:
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 blablabla@gmail.com
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
и у меня нет никаких указаний на то, что свопинг происходит в моменты, когда сайт работает медленно. Я забежал на вершину, и это не похоже на проблему с процессором. У меня сложилось впечатление, что создание потока apache могло быть узким местом, но это всего лишь предложение. Может быть, это дает дополнительную информацию!
РЕДАКТИРОВАТЬ: проблема, казалось, исчезла в течение некоторого времени, но возникает снова! И не только с Apache, подключение с помощью SSH занимает очень много времени, иногда до запроса ключевой фразы может пройти до 15 секунд. Также scp работает очень медленно. Поведение действительно непредсказуемо и делает сервер очень сложным в использовании. Любые идеи...?
Apache - сложный зверь и может быть здесь проблемой ... а может и нет. Я бы начал отладку общей медлительности сети, прежде чем залезть в эту темную дыру. В частности:
Попробуйте запустить netcat в режиме сервера на порту, настроенном для передачи содержимого локального файла, а затем подключитесь к нему с самого компьютера. Например:
пока правда; сделать nc -l 80 <index.html; сделано
Это устраняет проблемы с apache, физической сетью и DNS или IP-связью. Обратите внимание, что обслуживаемый файл является локальным - например, без монтирования NFS.
Если вы зашли так далеко, ваш сервер в порядке, и ваша сетевая маршрутизация тоже в порядке.
Теперь очистите DNS и убедитесь, что обратный поиск работает. dig 4.3.2.1.in-addr.arpa, например, чтобы проверить поиск адреса 1.2.3.4. Если он медленный, это проблема, и вам нужно будет поиграть с /etc/resolv.conf, dnsmasq или чем-то еще. Не продолжайте, пока он не станет твердым как скала. На этом этапе тоже стоит попробовать SSH / SCP - это должно быть быстро.
Далее Apache. Если вы зайдете так далеко, значит, ваша сеть в порядке, DNS работает и коробка в порядке. Таким образом, ваше приложение (например, www-сервер) остается. Попробуйте сократить конфигурацию до минимума и посмотреть, как у вас дела. Например Вот является одним.
Удачи!
Что происходит, когда вы пытаетесь получить доступ через lynx
или curl
с локального хоста или с машины в сети?
Также посмотрите этот блок от 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>
Я бы порекомендовал избавиться от всего этого блока, перезапустить Apache и повторить попытку. У меня тоже были странные зависания, когда Apache deny
действия против локального хоста или локального IP-адреса. Непонятные проблемы с поиском в DNS могут привести к зависанию Apache для каждого запроса. И задержка в 12 секунд на страницу заставляет меня думать, что это причина. Но из вашей конфигурации не на 100% ясно, является ли блок, который я указываю, виновником или нет. Но сделайте какой-нибудь поиск задач, связанных с поиском DNS, связанных с Apache.
Кроме того, трудно сказать, какие настройки должны быть на вашем сервере, не наблюдая за реальным трафиком ваших сайтов, но я предлагаю вам KeepAlive
настройки кажутся ресурсоемкими. Я бы рекомендовал изменить так:
KeepAlive On
MaxKeepAliveRequests 50
KeepAliveTimeout 2
Я бы также рекомендовал снизить 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>
Также настоятельно рекомендую установить Мунин на вашем компьютере, чтобы контролировать использование ресурсов. Избавляет от головной боли и дает хороший широкий взгляд на вещи.
Изменить: попробуйте их по одному!
Выскакивает пара вещей:
MaxRequestsPerChild 0
Если у вас нет причин использовать 0
(процесс никогда не умирает), затем немного увеличьте его (по умолчанию 1000
) сказать 100
и перезапустите, и посмотрите, улучшится ли это. Может предотвратить утечку памяти.
MaxClients 150
В зависимости от того, сколько памяти у вашего сервера, и если все три модуля вызываются одновременно, вам может не хватить памяти. Например, если ваш процесс apache имеет размер 20 МБ, у вас будет 150 клиентов x 20 МБ x 3 мода = 9000 МБ ~ 8,8 ГБ. Даже если вызывается только один из них, вы используете ~ 2,9 ГБ.
Если вы не используете все три мода, удалите ненужные из своего экземпляра apache.
Кроме того, как насчет вывода top
и free -m
во время этой медленной работы?