1. Чтобы не получить бан прочти правила магентоман! Читать обязательно!

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

Тема в разделе "Magento", создана пользователем xarow, 21 авг 2013.

Статус темы:
Закрыта.
Модераторы: Violent
  1. xarow

    xarow Постоялец

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

    Используется 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

    Надеюсь подробно расписал, по возможности, прошу помощи...Думаю, не только мне эта тема интересна. Если вдруг еще какая-то информация надо, только скажите. Заранее, благодарю всех, кто сможет хоть чем-то помочь...
     
  2. esche

    esche

    Регистр.:
    9 авг 2009
    Сообщения:
    359
    Симпатии:
    243
    По результатам работы MySQL (через сутки примерно) можно проанализировать при помощи скриптов вроде такого Перейти по ссылке
    Nginx есть смысл поставить.. и настроить. Он статику гораздо быстрее Apache отдаёт.. Магазин, небось с картинками?
     
  3. xarow

    xarow Постоялец

    Регистр.:
    8 фев 2013
    Сообщения:
    51
    Симпатии:
    36
    Подскажите пожалуйста, дополнительно Nginx установить? А то, знаю, что для Магенты Apache обязателен, но некоторые делают связку nginx+php+mysql

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

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

    uke_boy Писатель

    Регистр.:
    27 июл 2012
    Сообщения:
    7
    Симпатии:
    1
    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 больше вообще ничего ему не нужно. Думаю в чем-то помог, удачи!
     
    donvictorio нравится это.
  5. OliverGreen

    OliverGreen Постоялец

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

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

    И работаю без СВОП )
     
  6. xarow

    xarow Постоялец

    Регистр.:
    8 фев 2013
    Сообщения:
    51
    Симпатии:
    36
    Спасибо, с модулем Lesti FPC помогли, прирост не большой замечен. А подскажите пожалуйста, может смогли бы помочь в отключении ненужных JS библиотек???

    Подскажите пожалуйста, может при использовании Lesti FPC у вас перестал работать фильтр товаров, если он есть? Если да, и вы решили вопрос, могли бы пожалуйста подсказать? Спасибо!
     
    Последнее редактирование: 5 окт 2013
  7. gremromchello

    gremromchello

    Регистр.:
    31 авг 2010
    Сообщения:
    160
    Симпатии:
    70
    Тоже самое проявилось с lesti FPC перестал работать фильтр. Хотя на страницах впервые открываемых при включенных lesti фильтр первый раз срабатывает, а потом снова не работает хотя в панели поле с фильтром появляется. Прирост при включении гораздо ощутимей, чем другие устанавливаемые расширения работы с кешем. Думаю решение где-то на поверхности но сам пока не решил.
     
  8. xarow

    xarow Постоялец

    Регистр.:
    8 фев 2013
    Сообщения:
    51
    Симпатии:
    36
    Все элементарно просто. У меня тоже дилемма была такая, все там решается. Надо названия фильтров, например, в админке : тип оперативной памяти(typ_pamyati) или цвет(color) добавить в последнее окошко(нижнее) там где находятся
    id,
    category,
    page_id,
    p,
    limit,
    dir,
    order,
    mode

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

    Вопрос, есть ли у вас баннера используемые в левом или правом сайдбаре, только не с модулей, а виджетовые, ну просто вставленные картинки? Если есть, то их же меня периодически надо, вы как-то этот вопрос решили??? СО ВСЕМ касательно Lesti FPC разобрался, а вот с этим не смог
     
    gremromchello нравится это.
  9. devzorg

    devzorg Писатель

    Регистр.:
    25 авг 2012
    Сообщения:
    9
    Симпатии:
    2
    Поставить на крон очистку кеша Lesti (в гитхабе есть пример) и вопрос решится, а вообще само будет чиститься когда время истечет.
     
  10. KaiSer77

    KaiSer77 Постоялец

    Регистр.:
    21 июл 2013
    Сообщения:
    80
    Симпатии:
    41
    Есть в базе данных таблицы, которые постоянно растут и их надо бы чистить. Зайдите в 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

    На некоторых системах, очистка этих таблиц секунды может добавить.
     
    Skazhikadyadya нравится это.
Статус темы:
Закрыта.