Re[2]: Нагрузка на FreeBSD
Yuri Kushinov
yuri.kushinov at gmail.com
Sat Jan 13 17:55:50 MSK 2007
> Ну что могу сказать, крутится vBulletin и форум очень посещаемый (в
> пиках 700 уникальных в течении 15 мин.), на линкусе, где он до этого
> стоял (2xXeon 5130, 4Gb, RAID5) нагрузка не превышала в пиках 25%
> процессора. Тут, на новом сервере FreeBSD 6.2 (Pentium D 940, 2
> ядра, 2GB) и такие жуткие перегрузки.
> Я не столь опытен во FreeBSD, что бы знать все подводные камни, но
> зная, что в рассылке есть люди, сильные в этой ОС, решил просить
> помощи. FreeBSD на новом сервере не по своей воле выбрал, потому
> теперь только бороться осталось...
> Не пойму, как на линкусе php и БД не давали такой страшной нагрузки, а тут дают?
1. У вас стало в два раза меньше RAM.
2. У линукса подсистема ввода/вывода имеет более хорошую логику
кэширования часто запрашиваемой информации. Так что у вас фактически была
двойная буфферизация данных БД - одна на ключах/буфферах MySQL, другая на уровне OS.
Это так же помогало при записях/обновлениях БД.
3. Gentoo обычно всегда означает nptl, который никак не сравнится с pthreads.
4. RAID5 - а на новой машине?
Мощность процессора возможно реализовать на 90-100% /только/ при
условии кода близкого к идеальному и/или быстрого RAIDа и/или оптимальных
запросов к БД.
У вас же проблема налицо - MySQL, являсь самым последним звеном в
"логической" цепочке обработка запросов, банально и безбожно
тормозит.
nginx
apache
php
mysql
i/o
Посмотрите на mytop - запросов много? как долго они выполняются? Для
самых медленных из них проведите EXPLAIN и посмотрите хорошо ли они
индексированы. Если да - и запрос всё равно выполняется долго, то вам
вероятно надо увеличить key_buffer_size или innodb_buffer_pool_size,
в зависимости от того что вы используете.
Если у вас MyISAM, то почаще оптимизируйте таблицы.
Посмотрите на загрузку дисков - если они постоянно на отметке 100% -
то вот ваш bottleneck - постарайтесь каким-то образом эту нагрузку
снизить.. Из-за него страдает не только отдача статики, но и очень
сильно MySQL.
Уберите noatime с параметров mountирования партиции, настройте
буффера в nginx, руководствуясь error_log *log_path* debug; чтобы он не
писал временные файлы на диск если размер/количество буфферов не
достаточен(..чно).
В крайнем случае поразмыслите над запихиванием всего кода фрума на
ramdisk.
Понаблюдайте за статусами ngix (stub_status on) и Апачевским
/server-status на предмет открытых соединений и их количества,
сделайте выводы.
Протрассируйте все этапы выполнения запроса на
какую-либо страницу и найдите где этот запрос стопорится на самое
длительное время.
Полазте по системным логам (ошибки нехватки
памяти/буфуров/сокетов/слотов, неверных прав на файлы), почитайте dmesg,
потыкайте в sysctl - может вы просто попали в какой-то глупый лимит ресурсов.
Подходите к проблеме креативно. Не описывать же сейчас
пол-интернета статей по оптимизации серверов, причём сразу всех :)
--
Best regards,
Yuri Kushinov mailto:yuri.kushinov at gmail.com
More information about the nginx-ru
mailing list