Настройка nginx+apache2+mysql на VDS под ubuntu

12 3
_wind_
На сайте с 24.07.2006
Offline
110
3783

Параметры сервера: 384Mb RAM, 20GB hdd.

Ubuntu 11.10, на сервере также установлен последний Zend Framework и БД mysql

Работает PREFORK конфигурация, апач при загрузке весит ~20Mb, со временем растет до 30Mb.

Параметры конфигурации ниже, nginx отдает статику и кэширует часть запросов к apache.

Смущает то, что процессы apache/mysql залазит в swap, примерно такая картина (mysql спецально не настраивал):

Mem: 372436k total, 299960k used, 72476k free, 38020k buffers

Swap: 393212k total, 58180k used, 335032k free, 114900k cached

502 mysql 20 0 VIRT:170m RES:10m 3616 S 0.0 2.8 0:11.01 SWAP:160m 9040 DATA:131m mysqld

1719 www-data 20 0 VIRT:522m RES:18m 7508 S 0.0 5.2 0:02.45 SWAP:503m 428 DATA:24m apache2

Несколько вопросов:

1. Можно ли уменьшить swap для apache? Критично ли это для производительности сервера?

2. Сколько хостов в сутки сможет выдержать такая конфигурация, 5000 потянет? Что еще можно оптимизировать/улучшить?

3. На хостинге есть папка в которой 30000 подпапок. Может ли это влиять на производительность сервера? Можно ли улучшить? Сейчас настроил в nginx кэш open_file_cache для более быстрого доступа к файлам в этой папке. Правильно ли я это сделал?

4. Как можно оптимизировать mysql и нужно ли это?

Заранее спасибо.

Настройки apache:

KeepAlive Off

<IfModule mpm_prefork_module>

StartServers 4

MinSpareServers 4

MaxSpareServers 7

MaxClients 7

MaxRequestsPerChild 500

</IfModule>

Настройки nginx

worker_processes 4;

timer_resolution 100ms;

events {

worker_connections 768;

use epoll;

}

http{

sendfile on;

tcp_nopush on;

tcp_nodelay on;

keepalive_timeout 65;

types_hash_max_size 2048;

proxy_cache_path /var/cache/nginx levels=2:2 keys_zone=default:10m;

gzip on;

gzip_disable "msie6";

# gzip_vary on;

gzip_proxied any;

gzip_comp_level 4;

gzip_buffers 16 8k;

gzip_http_version 1.1;

gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

}

server {

listen 80; ## listen for ipv4; this line is default and implied

root /home/xxxxx.info/www;

index index.php;

# Make site accessible from http://localhost/

server_name xxxxx.info *.xxxxx.info;

location / {

open_file_cache max=1024 inactive=600s;

open_file_cache_valid 1000s;

open_file_cache_min_uses 1;

open_file_cache_errors on;

proxy_pass http://xxxxx.info:8080;

include /etc/nginx/proxy_params;

}

location /index {

proxy_pass http://xxxxx.info:8080;

proxy_cache default;

proxy_cache_valid 200 302 10m;

include /etc/nginx/proxy_params;

}

location /img {

root /home/xxxxx.info/www;

access_log off;

expires 15d;

add_header Last-Modified: $date_gmt;

}

}

Сдать/снять квартиру без посредников (http://to-rent.ru), Доход для вебмастера (http://www.sape.ru/r.1cc08e9f90.php), Продам WMZ/WMR за телебанк с доплатой 1%
M
На сайте с 01.12.2009
Offline
235
#1

У вас всё настроено не так.

начиная от nginx и кончая апачи.

Администратор Linux,Freebsd. построения крупных проектов.
_wind_
На сайте с 24.07.2006
Offline
110
#2
madoff:
У вас всё настроено не так.

начиная от nginx и кончая апачи.

А подробнее можно объяснить?

O
На сайте с 11.05.2012
Offline
3
#3
_wind_:
Параметры сервера: 384Mb RAM, 20GB hdd.
Ubuntu 11.10, на сервере также установлен последний Zend Framework и БД mysql
Работает PREFORK конфигурация, апач при загрузке весит ~20Mb, со временем растет до 30Mb.
Параметры конфигурации ниже, nginx отдает статику и кэширует часть запросов к apache.
Смущает то, что процессы apache/mysql залазит в swap, примерно такая картина (mysql спецально не настраивал):
Mem: 372436k total, 299960k used, 72476k free, 38020k buffers
Swap: 393212k total, 58180k used, 335032k free, 114900k cached
502 mysql 20 0 VIRT:170m RES:10m 3616 S 0.0 2.8 0:11.01 SWAP:160m 9040 DATA:131m mysqld
1719 www-data 20 0 VIRT:522m RES:18m 7508 S 0.0 5.2 0:02.45 SWAP:503m 428 DATA:24m apache2

Несколько вопросов:
1. Можно ли уменьшить swap для apache? Критично ли это для производительности сервера?
2. Сколько хостов в сутки сможет выдержать такая конфигурация, 5000 потянет? Что еще можно оптимизировать/улучшить?
3. На хостинге есть папка в которой 30000 подпапок. Может ли это влиять на производительность сервера? Можно ли улучшить? Сейчас настроил в nginx кэш open_file_cache для более быстрого доступа к файлам в этой папке. Правильно ли я это сделал?
4. Как можно оптимизировать mysql и нужно ли это?

1. Апач сам в своп лезть не может, его что-то туда вытесняет; при чем вытесняются большей частью неиспользуемые/малоиспользуемые страницы памяти. Неприятно, но может быть смертельно. Если хотите разобраться - надо смотреть, что память жрёт.

И еще, покажите

sysctl -a | grep swappiness

2. Сильно зависит от того, что отдаёте.

3. Какая ФС? Если не включён dir_index - будет плохо.

4. Все оптимизации MySQL делятся на две части: оптимизация сервера и оптимизация баз.

Насчет сервера, всё сводится к "больше памяти на всякие-разные кеши и временные таблицы". В Вашем случае - особо не разгуляешься.

Насчет баз - отдельная история.

P.S.: Я надеюсь, у Вас 32х-битная бубунта? Для 64 памяти маловато.

M
На сайте с 01.12.2009
Offline
235
#4
_wind_:
А подробнее можно объяснить?

Чё там объяснять ? StartServers 4 - и это при 384 памяти.

nginx process 4 - много !

nginx КЕШИ - думаю вам только навредят !

--

Эта тема переходит в обучаемый курс юного бойца. 🍿

O
На сайте с 11.05.2012
Offline
3
#5
madoff:
nginx КЕШИ - думаю вам только навредят !

nginx кеш страниц держит в файловой системе.

M
На сайте с 01.12.2009
Offline
235
#6
Obramko:
nginx кеш страниц держит в файловой системе.

Если вы понимали-бы, то связали три вещи, no ram - swap and cache.

O
На сайте с 11.05.2012
Offline
3
#7
madoff:
Если вы понимали-бы, то связали три вещи, no ram - swap and cache.

Если б Вы понимали, то бы догадались, что nginx хранит свой кеш в файловой системе, что никак не может занимать ram.

Конечно, кеш файловой системы может занимать ram, но не настолько агрессивно, чтобы загнать в своп работающие процесы.

_wind_
На сайте с 24.07.2006
Offline
110
#8

sysctl -a | grep swappiness

В этом файле сейчас стоит 5, по умолчанию стояло 60

2. Сильно зависит от того, что отдаёте.

картинки и html.

3. Какая ФС? Если не включён dir_index - будет плохо.

/dev/xvda1. Как проверить включен ли dir_index?

4. Все оптимизации MySQL делятся на две части: оптимизация сервера и оптимизация баз.
Насчет сервера, всё сводится к "больше памяти на всякие-разные кеши и временные таблицы". В Вашем случае - особо не разгуляешься.
Насчет баз - отдельная история.

Понятно, поэтому я эту часть пока не трогал

P.S.: Я надеюсь, у Вас 32х-битная бубунта? Для 64 памяти маловато.

Извиняюсь, это не VDS, а VPS, общие параметры сервера 24Gb ram 1Tb hdd.

---------- Добавлено 12.05.2012 в 09:58 ----------

Чё там объяснять ? StartServers 4 - и это при 384 памяти.

А в чем проблема? каждые ест по 20-30 Мб, память это позволяет

nginx process 4 - много !

Возможно, сколько нужно поставить? На память это все равно не влияет. 4 поставил тк у родного сервера много ядер и каждый процесс сможет крутиться на своем ядре.

nginx КЕШИ - думаю вам только навредят !

Почему?

O
На сайте с 11.05.2012
Offline
3
#9
_wind_:
sysctl -a | grep swappiness

В этом файле сейчас стоит 5, по умолчанию стояло 60

Где-то так пусть и будет.

_wind_:

картинки и html.

А PHP нету? ;)

_wind_:

/dev/xvda1. Как проверить включен ли dir_index?

Это устройство, на котором размещена ФС. Я спрашивал о типе ФС. Посмотреть можно в mount.

Для ext3/4 наличие dir_index проверяется как-то так:

dumpe2fs /dev/xvda1|grep dir_index

Включается так:

tune2fs -O dir_index /dev/xvda1

Индексы заполнятся после перепроверки ФС:

e2fsck -D -f /dev/xvda1
_wind_:

Понятно, поэтому я эту часть пока не трогал

Пока и не трогайте. Если освободится память - можно будет посмотреть.

_wind_:
Извиняюсь, это не VDS, а VPS, общие параметры сервера 24Gb ram 1Tb hdd.

А какая технология виртуализации? Xen? KVM?

_wind_:

Возможно, сколько нужно поставить? На память это все равно не влияет. 4 поставил тк у родного сервера много ядер и каждый процесс сможет крутиться на своем ядре.

Я бы сказал, что будет достаточно 2 на Apache и 2 на nginx.

Всё-таки, система 32 или 64?

_wind_
На сайте с 24.07.2006
Offline
110
#10
А PHP нету? ;)

Ну и PHP естественно.

dumpe2fs /dev/xvda1|grep dir_index

Filesystem features: has_journal resize_inode dir_index filetype needs_recovery sparse_super large_file

А какая технология виртуализации? Xen? KVM?

Xen

Я бы сказал, что будет достаточно 2 на Apache и 2 на nginx.

Всего 2 для apache? nginx поставлю 2, спасибо.

Всё-таки, система 32 или 64?

64

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий