Сервер тяжело «переваривает» однопоточный аплоадинг

12
[Удален]
2252

Здравствуйте.

Есть достаточно мощный сервер (6 ядерный Xeon, 128 Gb оперативки, аппаратный RAID 6).

На нем установлен Wordpress. Туда идет автоматический постинг контента в однопоточном режиме с локального компа.

Процесс идет достаточно долго, например на аплоадинг одной статьи весом 100 Кб уходит по 10 секунд. Но это ненормально, такая статья должна грузится за секунду.

Сервер в данный момент не загружен, процессор загружен на 10%, iowait 0,5%, канал полностью свободен.

В чем может быть причина?

V
На сайте с 05.08.2007
Offline
87
#1

Настройки mysql?

С уважением, Victor (http://adm-lib.ru)
kxk
На сайте с 30.01.2005
Offline
970
kxk
#2

Zakazchik2017, Php-fpm поставить и постить в 100 потоков непарясь:)

Ваш DEVOPS
Andreyka
На сайте с 19.02.2005
Offline
822
#3

Причина - в голове. Которая вместо правильной архитектуры из нескольких мелких дешевых VDS сделал тупо один мощный сервер.

Дорого, глупо, медленно.

Не стоит плодить сущности без необходимости
[Удален]
#4
kxk:
Zakazchik2017, Php-fpm поставить и постить в 100 потоков непарясь:)

Так он стоит.

С каналом что?

Канал не нагружен.

Причина - в голове. Которая вместо правильной архитектуры из нескольких мелких дешевых VDS сделал тупо один мощный сервер.
Дорого, глупо, медленно.

Что-то я не понял как один неделимый сайт можно разместить на нескольких дешевых VDS? 😕

O9
На сайте с 03.05.2016
Offline
38
#5

Zakazchik2017, без профайлинга тут не обойтись. Трудно гадать, тем более не зная полностью кода сайта и настроек сервера.

Может быть несколько узких мест:

1. На уровне TCP - пропускная способность, задержка установки соединения.

2. На уровне PHP - как именно обрабатывается запрос.

3. На уровне MySql.

4. На уровне клиента, который загружает контент - все ли корректно работает?

Вам надо замерять время. Правило №1 при работе с быстродействием: "Never guess about performance, measure it". Разбейте 10 секунд как минимум на 3 составляющие - сколько из тратится на собственно передачу данных, сколько - в коде PHP и сколько - в MySql, после этого можно будет думать дальше.

А без этого можно долго гадать на кофейной гуще и с апломбом писать рецепты из аресенала капитана Очевидности.

[Удален]
#6

В общем, удалось решить вопрос. Теперь постинг идет со скоростью 1 материал/ сек.

Для этого провел тонкую оптимизацию MYSQL (особо влиял параметр open_files_limit, который пришлось поставить равным = 1000000, и innodb_buffer_pool_size=16000M)

Также лимиты по открытым файлам на процессы в etc/security/limits.conf

Тонко настроил по рекомендациям для высоконагруженных проектов Sysctl.conf, httpd.conf. nginx.conf, php-fpm.conf.

Однако, по-моему сервер все равно не работает в полную силу. Нагрузка процессора 25%, канал занят на 3 Мбит из 100…

Реально ли выжать что-то большее, или идут уже какие-то фундаментальные ограничения? Потому что например FTP также грузит канал где-то на 5-6 Мбит из 100, непонятно что мешает серверу работать быстрее?

Хотелось бы увеличить скорость постинга до 5 страниц/сек, благо ресурсы позволяют.

N4
На сайте с 27.07.2008
Offline
89
#7
Zakazchik2017:
В общем, удалось решить вопрос. Теперь постинг идет со скоростью 1 материал/ сек.

Для этого провел тонкую оптимизацию MYSQL (особо влиял параметр open_files_limit, который пришлось поставить равным = 1000000, и innodb_buffer_pool_size=16000M)

Также лимиты по открытым файлам на процессы в etc/security/limits.conf

Тонко настроил по рекомендациям для высоконагруженных проектов Sysctl.conf, httpd.conf. nginx.conf, php-fpm.conf.

Однако, по-моему сервер все равно не работает в полную силу. Нагрузка процессора 25%, канал занят на 3 Мбит из 100…

Реально ли выжать что-то большее, или идут уже какие-то фундаментальные ограничения? Потому что например FTP также грузит канал где-то на 5-6 Мбит из 100, непонятно что мешает серверу работать быстрее?

Хотелось бы увеличить скорость постинга до 5 страниц/сек, благо ресурсы позволяют.

если аплоад на сервер не лимитирован провайдером, то можно поковырять sysctl

https://klaver.it/linux/sysctl.conf

Интернет-магазин: SP.Easy.Shop 1.4
[Удален]
#8
number4:
если аплоад на сервер не лимитирован провайдером, то можно поковырять sysctl
https://klaver.it/linux/sysctl.conf

Попробую дополнить, но есть ли смысл?

База данных более 20 миллионов записей (несколько ГБ), может дело в ней уже? Каждый постинг это по сути перебор и выборка по сложному условию миллионов записей в нескольких таблицах (посты, категории, теги, связи, таксономия, аттачменты), может уже фундаментально ускорить невозможно? Хотя нагрузка на все (процессор, память, i/o, канал) не выше 20%.

N4
На сайте с 27.07.2008
Offline
89
#9
Zakazchik2017:
Попробую дополнить, но есть ли смысл?

База данных более 20 миллионов записей (несколько ГБ), может дело в ней уже? Каждый постинг это по сути перебор и выборка по сложному условию миллионов записей в нескольких таблицах (посты, категории, теги, связи, таксономия, аттачменты), может уже фундаментально ускорить невозможно? Хотя нагрузка на все (процессор, память, i/o, канал) не выше 20%.

во-первых нужно оптимизировать my.cnf, во-вторых вынести tmpdir на tmpfs

сколько RAM на сервере? сколько отведено под key-buffers?

какие значения у:

sort_buffer_size

read_buffer_size

join_buffer_size

max_connections

thread_concurrency

query_cache_type

query_cache_limit

query_cache_size

ускорить фундаментально-то можно, например вынести на отдельный SSD

или если дофига памяти (>128Gb) на tmpfs

что показывает

free -m

у меня в базе 200+ таблиц, суммарно 600М+ строк, активно используется процентов 10% от объема базы, ничего нормально сервер не напрягается особо.

[Удален]
#10
number4:
во-первых нужно оптимизировать my.cnf, во-вторых вынести tmpdir на tmpfs
сколько RAM на сервере? сколько отведено под key-buffers?
какие значения у:
sort_buffer_size
read_buffer_size
join_buffer_size
max_connections
thread_concurrency
query_cache_type
query_cache_limit
query_cache_size

Сервер с 128 Гб ОЗУ. База на аппаратном RAID 6, там дисковая система конечно хромает на скорость записи, сейчас думаю об выносе на SSD, но не думаю что на данный момент проблема в аппаратной части.

ОЗУ занято на 25%.

my.cnf

sort_buffer_size, read_buffer_size, join_buffer_size = 16 ГБ

max_connections = 5000

thread_concurrency = 32

query_cache_limit, query_cache_size = 512

p.s. потюнил sysctl в вашем примере, производительность (скорость аплоадинга) увеличило примерно на 20%.

Сейчас не понятно во что упирается. Думал в базу, но mysqltuner пишет что все прекрасно. Но нагрузка на сервер все равно до 30%. Было бы логично, что если он на пределе, она приблежалась бы к 100%.

во-вторых вынести tmpdir на tmpfs

Вот это еще не пробовал, надо сделать.

12

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