Оптимизация сервера apache nginx mysql

12 3
Александр Бородич
На сайте с 05.02.2010
Offline
25
6023

Есть сервер VPS: диск 20000, опера 1024, проц 1500 Mhz

На сервере размещены 11 сайтов, примерно 5000 уникальных.

В основном движки DLE.

Начались проблемы с мускулам, ошибки, то все коннекты закончились то просто ошибки какие то, то вообще съест всю память и сервер в дауне, вроде сегодня настроил, стало более менее терпимо, но хотел бы услышать мнение профессионалов, где и что у меня в конфигах настроено не правильно, вернее не оптимально, может кто нибудь посоветует что либо, где чего поменять, с чем поэкспериментировать и прочее.

на ваше обозрение выкладываю конфиги

apache2.conf

ServerRoot "/etc/apache2"

Timeout 15
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 10
<IfModule mpm_prefork_module>
StartServers 35
MinSpareServers 2
MaxSpareServers 13
MaxClients 250
MaxRequestsPerChild 100
</IfModule>
<IfModule mpm_worker_module>
StartServers 35
MaxClients 250
MinSpareThreads 2
MaxSpareThreads 13
ThreadsPerChild 25
MaxRequestsPerChild 200
</IfModule>
AccessFileName .htaccess
<Files ~ "^\.ht">
Order allow,deny
Deny from all
</Files>
DefaultType text/plain
HostnameLookups Off

nginx.conf


user www-data;
worker_processes 1;

error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

access_log /var/log/nginx/access.log;

sendfile on;
#tcp_nopush on;

#keepalive_timeout 0;
keepalive_timeout 65;
tcp_nodelay on;

gzip on;

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
client_max_body_size 16m;
log_format isp '$bytes_sent $request_length';

my.cnf


[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock

[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0

[mysqld]

user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
language = /usr/share/mysql/english
skip-external-locking

key_buffer = 16M
max_allowed_packet = 16M
thread_stack = 128K
thread_cache_size = 8

myisam-recover = BACKUP
max_connections = 200
table_cache = 128
thread_concurrency = 4

query_cache_limit = 1M
query_cache_size = 32M


expire_logs_days = 10
max_binlog_size = 100M

[mysqldump]
quick
quote-names
max_allowed_packet = 16M

[mysql]

[isamchk]
key_buffer = 32M

Помогите пожалуйста оптимизировать

Progs-letitbit
На сайте с 26.08.2009
Offline
30
#1

max_connections = 200 - можно и 1000 поставить при желании.

Вообще если в мускуль упирается - http://dev.mysql.com/doc/refman/5.1/en/slow-query-log.html - поставьте лог медленных запросов, потом изучайте что там вываливается, ставьте индексы, оптимизируйте запросы.

Универсальных решений "Чтобы все летало" нет, всегда надо плясать исходя из конкретного случая.

Фотопартнерка по созданию фоторамок - до 70% с СМС (http://kommuna.me/index.php?/topic/7523-%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82-%D1%84%D0%BE%D1%82%D0%BE%D1%80%D0%B0%D0%BC%D0%BA%D0%B0/)
Александр Бородич
На сайте с 05.02.2010
Offline
25
#2
Progs-letitbit:
max_connections = 200 - можно и 1000 поставить при желании.
Вообще если в мускуль упирается - http://dev.mysql.com/doc/refman/5.1/en/slow-query-log.html - поставьте лог медленных запросов, потом изучайте что там вываливается, ставьте индексы, оптимизируйте запросы.
Универсальных решений "Чтобы все летало" нет, всегда надо плясать исходя из конкретного случая.

ставил 200 вылетала ошибка превышен лимит конектов, поставил 300, сервер начал уходить в даун с исчерпаной памятью.

лог поставил

log_slow_queries	= /var/log/mysql/mysql-slow.log

посмотрим что из этого выйдет...

пока ничего интересного в логе не нашел


Tcp port: 3306 Unix socket: /var/run/mysqld/mysqld.sock
Time Id Command Argument
# Time: 110221 10:03:11
# User@Host: ibyflyuser[ibyflyuser] @ [1.7.224.99]
# Query_time: 13 Lock_time: 0 Rows_sent: 1043 Rows_examined: 2091
use ibyfly;
SELECT *
From sites
WHERE (validate <>'0')
ORDER BY vote_p , vote_m DESC;
# Time: 110221 10:41:54
# User@Host: ibyflyuser[ibyflyuser] @ [1.202.35.121]
# Query_time: 12 Lock_time: 0 Rows_sent: 0 Rows_examined: 0
SELECT id
From users;

при этом не понимаю что это вообще такое

User@Host: ibyflyuser[ibyflyuser] @ [1.202.35.121]

от куда это ibyflyuser взялось

Progs-letitbit
На сайте с 26.08.2009
Offline
30
#3

ibyflyuser - насколько я понимаю это имя пользователя в MySQL под которым эти запросы производились.

Касательно первого запроса, например, можно стандартно его оптимизировать - во-первых вместо звездочки выбирать только нужные поля, во-вторых поставить индексы, если их там ещё нет, на поля validate, vote_p и vote_m.

bigton
На сайте с 17.08.2009
Offline
43
#4

Существует утилита mysqldumpslow для анализа mysql-slow.log.

Пример.

1. Показать ТОП10 медленных запросов (сортировка по времени исполнения time):

mysqldumpslow -s t -t 10 /var/log/mysql/mysql-slow.log

2. Показать ТОП10 запросов в который не используются индексы (сортировка по кол-ву вызовов count):

mysqldumpslow -s c -t 10 /var/log/mysql/mysql-slow.log

Анализировать нужно с умом, просто наставить индексов не всегда вариант, особенно если речь идет о большой таблице которая постоянно insert/update. Иногда правильней переписать запросов/логику работы скрипта.

G
На сайте с 12.04.2008
Offline
101
#5

С ДЛЕ есть медленные запросы связанные с выводом related-news

Пришлось у себя отключить вывод вообще, сразу пропала нагрузка

Продажа сайтов (/ru/forum/866932) под Amazon и AdSense
cainz
На сайте с 05.01.2008
Offline
60
#6

память выкипает скорее всего от MaxClients 250 - это оч. много - посмотрите сколько запрашивает 1 процес апача - будет в районе 20..50мб.

плюс непонятно как связаны нгинкс с апачем - кто что делает.

подозреваю что в вашем случае все отдает апач, а нгинкс просто зря память отъедает (или вообще не запущен).

по мускулу - количество медленных запросов уменьшится, если уменьшить количество потоков (thread_concurrency)

...а вообще - ваши конфиги расчитаны на куда более мощную конфигурацию - напр. апач в пиковой нагрузке (ддос или просто резкое увеличение посещалки) будет потреблять в районе 5..10 гб памяти (у вас 1г), мускулу при 100% нагрузке нужно 4 ядра\процесора (у вас 1). (но это в теории - реально даже в пиковую нагрузку нужно меньше)

в догонку - включите mod_status - и смотрите в пиковые нагрузки - какие страницы запрашиваются, сколько процессов апача запущено, сколько из них работают, и подправте конфиг. и паралельно нгинксом закройте апач, и скиньте ему процессы на минимум

kxk
На сайте с 30.01.2005
Offline
990
kxk
#7

Александр Бородич, Вам нужно заказать настройку у админа и неморочить себе голову, имхо

Ваш DEVOPS
G
На сайте с 12.04.2008
Offline
101
#8

Админ может помочь с настройках сервака, но уж не с медленными запросами самого движка. Как бы не был настроен сервак, если движок кривой - можно свалить любой сервер.

kxk
На сайте с 30.01.2005
Offline
990
kxk
#9

GSMtricks, Если настроен кеш админом нормально то будет летать и медленный как вертолёт

G
На сайте с 12.04.2008
Offline
101
#10

Не буду спорить. Мое мнение не будет летать все равно. Медленный SQL запрос это одно, а кеш это иное. Вешается SQL и тогда до одного места весь кеш

12 3

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