Может ли кто-то помочь с оптимизацией VPS768 for Magento?

Статус
В этой теме нельзя размещать новые ответы.

xarow

Постоялец
Регистрация
8 Фев 2013
Сообщения
54
Реакции
37
Здравствуйте ВСЕМ! Создаю тему в надежде хоть как-то оптимизироваться(работало нормально, потом сервер лег и после восстановления не смог его оптимизировать, вернуть в прежнее состояние).

Используется Magento Community 1.6 с полностраничным кешированием.

Есть ВПС сервер 2 ядра Xeon - 2.8 Mhz, ОЗУ 768 Мб, SSD 25 Гб. Под CantOS

Используется пока что Apache + PHP + Mysql (не знаю, надо ли с 768 Nginx ставить и настроится ли, чтоб в ПЛЮСе быть)

Установлены xCache and Memcache - оптимизаторы, но не знаю, как их точно настраивать(в нете сотни вариантов и уже перепробованные 15 не проконали в должной форме)

GZip компрессия есть, более-менее оптимизирован.

Вот то, что выдает в запросе "TOP" через SSH :

top - 20:06:12 up 7:43, 1 user, load average: 0.17, 0.45, 0.52
Tasks: 101 total, 1 running, 100 sleeping, 0 stopped, 0 zombie
Cpu(s:( 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 768012k total, 751136k used, 16876k free, 24620k buffers
Swap: 524280k total, 41328k used, 482952k free, 337188k cached

Такая картина постоянно, только при перезагрузке либо Мускуля или Апача освобождается ПОЛОВИНА от всей памяти.

Также в .Htaccess используется кеширование с помощью браузера + в Local.xml прописаны строки от Memcached.

Вот, что в My.cnf у меня:

[mysqld]
port = 3306
socket = /var/lib/mysql/mysql.sock
skip-locking
key_buffer = 16M
query_cache_size= 16M
tmp_table_size = 32M
max_allowed_packet = 1M
table_cache = 480
sort_buffer_size = 1M
read_buffer_size = 2M
read_rnd_buffer_size = 1M
thread_cache = 16
max_connections=150
join_buffer_size = 128k
net_buffer_length = 20K
thread_stack = 640K
query_cache_limit = 1M

expire_logs_days=5

#skip-innodb

# Uncomment the following if you are using InnoDB tables
innodb_data_home_dir = /var/lib/mysql
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /var/lib/mysql
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 256M
innodb_additional_mem_pool_size = 20M
# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 2
innodb_lock_wait_timeout = 120
innodb_thread_concurrency = 8

[mysqldump]
quick
max_allowed_packet = 16M
default-character-set = utf8

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates

default-character-set = utf8
[myisamchk]
key_buffer_size = 64M
sort_buffer_size = 64M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

Установлены на сервере такие модули, из папки /etc/php.d :
curl.ini
dom.ini
fileinfo.ini
gd.ini
json.ini
mbstring.ini
mcrypt.ini
memcache.ini
memcache.ini.rpmsave
memcached.ini.disabled
mysql.ini
mysqli.ini
pdo.ini
pdo_mysql.ini
pdo_sqlite.ini
phar.ini
php.ini
sqlite3.ini
wddx.ini
xcache.ini
xmlreader.ini
xmlwriter.ini
xsl.ini
zip.ini

Надеюсь подробно расписал, по возможности, прошу помощи...Думаю, не только мне эта тема интересна. Если вдруг еще какая-то информация надо, только скажите. Заранее, благодарю всех, кто сможет хоть чем-то помочь...
 
По результатам работы MySQL (через сутки примерно) можно проанализировать при помощи скриптов вроде такого Для просмотра ссылки Войди или Зарегистрируйся
Nginx есть смысл поставить.. и настроить. Он статику гораздо быстрее Apache отдаёт.. Магазин, небось с картинками?
 
По результатам работы MySQL (через сутки примерно) можно проанализировать при помощи скриптов вроде такого Для просмотра ссылки Войди или Зарегистрируйся
Nginx есть смысл поставить.. и настроить. Он статику гораздо быстрее Apache отдаёт.. Магазин, небось с картинками?

Подскажите пожалуйста, дополнительно Nginx установить? А то, знаю, что для Магенты Apache обязателен, но некоторые делают связку nginx+php+mysql

Кстати, делал анализ, в рекомендациях было :
- поставить innodb_buffer_pool_size = 570M
- query_cache_size= 16M
- join_buffer_size = 128k

Как видно из конфига - это все есть, кроме innodb_buffer_pool_size, его поставил в 128м и стало чуть лучше работать.
 
Подскажите пожалуйста, дополнительно Nginx установить? А то, знаю, что для Магенты Apache обязателен, но некоторые делают связку nginx+php+mysql

Кстати, делал анализ, в рекомендациях было :
- поставить innodb_buffer_pool_size = 570M
- query_cache_size= 16M
- join_buffer_size = 128k

Как видно из конфига - это все есть, кроме innodb_buffer_pool_size, его поставил в 128м и стало чуть лучше работать.

Nginx - как бы стандарт для быстрого фронтэнда - либо сам, либо в связке с апачем как кэширующий.
Я использую первый вариант и доволен как слон (ввв.mobilizer.ua), не уверен, есть ли необходимость именно в апаче - разве что, кто-то не знает как редиректы и виртуальные хосты в nginx пишутся...
Nginx определенно легче и быстрее.
Как ставить не подскажу - в инете полно и так уже мануалов, а вот по конфигурации sql - памяти маловато - у меня на 1 гиге без загрузки 720 мег по-любому съедает, так что если у тебя 768, то считай как только начинается кэширование страниц и кода - это тоже съедает, плюс каждый пхп-скрипт может сьесть тоже немало. В такой ситуации mysql уходит в бесконечный своп и через некоторое время сервак падает. Поэтому запас в 300-500 мег обязателен, ИМХО. Обрати внимание на размеры кэшей.

На вс. случай мой my.cnf:

Код:
# You can copy this file to
# /etc/my.cnf to set global options,
# mysql-data-dir/my.cnf to set server-specific options (in this
# installation this directory is /var/lib/mysql) or

# The following options will be passed to all MySQL clients
[client]
#password    = your_password
port        = 3306
socket        = /var/lib/mysql/mysql.sock
default-character-set = utf8

# Here follows entries for some specific programs

# The MySQL server
[mysqld]
port = 3306
socket = /var/lib/mysql/mysql.sock
#skip-locking
key_buffer_size = 16M
max_allowed_packet = 4M
table_cache = 1024
sort_buffer_size = 128K
read_buffer_size = 512K
thread_cache_size = 8
read_rnd_buffer_size = 256K
net_buffer_length = 64K
thread_stack = 192K
query_cache_size = 128M
query_cache_type  = 1
query_cache_limit = 8M
long_query_time = 2
max_connections = 16
join_buffer_size = 4M
expire_logs_days = 7
myisam_sort_buffer_size = 128K
#innodb_force_recovery=1
log-queries-not-using-indexes = 1
wait_timeout = 120
tmp_table_size = 64M
max_heap_table_size = 64M

# Don't listen on a TCP/IP port at all. This can be a security enhancement,
# if all processes that need to connect to mysqld run on the same host.
# All interaction with mysqld must be made via Unix sockets or named pipes.
# Note that using this option without enabling named pipes on Windows
# (using the "enable-named-pipe" option) will render mysqld useless!
#
server-id    = 1
default-character-set = utf8

# Uncomment the following if you want to log updates
#log-bin=mysql-bin
log-slow-queries=mysql-slow

# Disable Federated by default
skip-federated

# Uncomment the following if you are NOT using BDB tables
skip-bdb

# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = /var/lib/mysql/
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = /var/lib/mysql/
#innodb_log_arch_dir = /var/lib/mysql/
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 768M
innodb_additional_mem_pool_size = 32M
# Set .._log_file_size to 25 % of buffer pool size
#innodb_log_file_size = 32M
innodb_log_buffer_size = 16M
innodb_lock_wait_timeout = 120
innodb_file_io_threads=64
innodb_thread_concurrency = 3
innodb_flush_log_at_trx_commit = 0
innodb_open_files = 1024
innodb-file-per-table=ON
innodb_flush_method=O_DIRECT
transaction-isolation=READ-COMMITTED
tmp_table_size = 32M
innodb_autoextend_increment = 32

[mysqldump]
quick
default-character-set = utf8

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
# safe-updates

Не скажу, что сам суперзнаток, но я уменьшил все буферы и вообще все, что не используется движком INNODB (MyISAM, например и т.д.) - Мадженто использует всего пару таблиц c MyISAM - для логов, а так - кроме INNO больше вообще ничего ему не нужно. Думаю в чем-то помог, удачи!
 
Для оптимальной работы Магенто на бюджетных ВПС надо скорее сам магазин оптимизировать для сервера. У меня некоторые работают на ВПС с 512 ОЗУ, 1 ядро 2Ггц. В магазине около 80к простых товаров с простыми наборами атрибутов. И около 40 наборов атрибутов.
Поначалу всё это было достаточно медленным. Для ускорения использовал компиляцию, полностраничный кеш Lesti FPC, объединение CSS. Отключил ненужные JS библиотеки.
Естественно подправил базовые настройки MySQL, PHP и NGINX. К слову именно на сервере с Нджинксом я замечаю ощутимую разницу в производительности. Кстати вместо стандартного мускуля использую MariaDB.
С момента разработки до момента внедрения вышеупомянутых настроек магаз на тесте Лоадимпакт показал 4 сек при 50 одновременных подключений.

Ещё не перевел на JQuery Google - использую от шаблона. Не оптимизировал оставшиеся JS файлы, не занимался более глубокой настройкой сервера и не ставил Варниш. То есть ещё даже есть запас потенциального повышения производительности.

И работаю без СВОП )
 
Спасибо, с модулем Lesti FPC помогли, прирост не большой замечен. А подскажите пожалуйста, может смогли бы помочь в отключении ненужных JS библиотек???

Подскажите пожалуйста, может при использовании Lesti FPC у вас перестал работать фильтр товаров, если он есть? Если да, и вы решили вопрос, могли бы пожалуйста подсказать? Спасибо!
 
Последнее редактирование:
Тоже самое проявилось с lesti FPC перестал работать фильтр. Хотя на страницах впервые открываемых при включенных lesti фильтр первый раз срабатывает, а потом снова не работает хотя в панели поле с фильтром появляется. Прирост при включении гораздо ощутимей, чем другие устанавливаемые расширения работы с кешем. Думаю решение где-то на поверхности но сам пока не решил.
 
Все элементарно просто. У меня тоже дилемма была такая, все там решается. Надо названия фильтров, например, в админке : тип оперативной памяти(typ_pamyati) или цвет(color) добавить в последнее окошко(нижнее) там где находятся
id,
category,
page_id,
p,
limit,
dir,
order,
mode

И все будет в ажуре. Сам голову долго ломал.

Вопрос, есть ли у вас баннера используемые в левом или правом сайдбаре, только не с модулей, а виджетовые, ну просто вставленные картинки? Если есть, то их же меня периодически надо, вы как-то этот вопрос решили??? СО ВСЕМ касательно Lesti FPC разобрался, а вот с этим не смог
 
Поставить на крон очистку кеша Lesti (в гитхабе есть пример) и вопрос решится, а вообще само будет чиститься когда время истечет.
 
Есть в базе данных таблицы, которые постоянно растут и их надо бы чистить. Зайдите в phpmyadmin и посмотрите размер следующих таблиц, если они очень-очень большие, стоит проверить какой давности там последние записи и удалить совсем старые.

dataflow_batch_export
dataflow_batch_import
log_customer
log_quote
log_summary
log_summary_type
log_url
log_url_info
log_visitor
log_visitor_info
log_visitor_online
report_viewed_product_index
report_compared_product_index
report_event

На некоторых системах, очистка этих таблиц секунды может добавить.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху