Перейти к содержанию
NemoTec

Ускорение работы всей системы за счёт TMPFS\RAMFS

Рекомендуемые сообщения

Итак, пока что опишу сумбурно. Завтра загляну и допишу. Если создал не там - простите, не нашел куда.
Имеется "сервак" всё лежит на ноутбуке :'( следующей конфы:
Для тех, кому интересно
CPU: Intel Pentium Dual-Core T3400 @ 2.0 Ghz
MainBoard: Intel PM45 Express
RAM: 3 Гбайт DDR2 @ 800 Mhz
HDD: WD 320 Гбайт @ 5400 об./мин
Всё настроено по инструкции "Идеальный сервер - Ubuntu 11.04 [iSPConfig 3]"+ я поставил memcache, nginx, eaccelerator...
Долгое время юзал memcache+nginx и был доволен, но сегодня в "заду" загорелось и решил поискать я что-то эдакое. Эдаким оказалась TMPFS. В кратце - это файловая система, целиком сидящая в RAM, отличия от RAMFS в том, что RAMFS может динамично увеличиваться, пока не "съест" всю память и не использует swap (если я всё правильно понял).
Короче, заинтересовался я и начал рыть. Нашел вот этот пост. В нём меня дико заинтересовала фраза:

Such type of content is a hosted website. You can decrease page or resource loading time by moving them from hard disk to the memory filesystem.

Теперь вопрос:
Как это всё настроить так, чтобы всё было прозрачно? То есть чтобы при создании сайта или базы в ISPconfig они ложились в TMPFS раздел, который бы монтировался при включении и сохранялся при выключении.
Попробовал - получилось. Перенёс сайт на Opencart, но на глаз не сильно понял что же поменялось... Подумал, подумал и решил, что виновата база. Рискнул и перенёс всю папку /var/lib/mysql
Итог - всё просто летает. Изменений в fstab не вносил, то есть при ребуте всё сотрётся и надо будет монтировать и переносить опять.
Продолжая рыть нашел такой пост. В нём уже гораздо интересней, так как есть возможность:

Чтоб при включении перенести файлы из .ramdisk-archive в .ramdisk

Теперь вопрос:
Как это всё настроить так, чтобы всё было прозрачно? То есть чтобы при создании сайта или базы в ISPconfig
они ложились в TmPFS раздел, который бы монтировался при включении и сохранялся при выключении.

Я знаю что:
1. У меня в есть около 1,5гб свободной оперативы.
2. Есть /var/www
3. Сайты, которые там лежат вместе с базами, спокойно уместятся в 1,5гб
Ну что, попробуем?! 
 
================================UPDATE================================
MySQL в TMPFS
Итак, только что у меня получилось завести MySQL в TMPFS. Я делал это на Ubuntu 13.04
Всё делалось с помощью статей, приведённых в первом посте, и методом тыка. Так что любые дополнения и улучшения приветствуются.
 
1. Первым делом создаём две директории: "mysql_tmp" - рабочая папка MySQL в TMPFS и "mysql_arch" - папка для сохранения на жестком диске.
 

mkdir /var/lib/mysql_tmp
mkdir /var/lib/mysql_arch

2. Далее назначаем владельца рабочей папки, и делаем её доступной для записи

chown mysql:mysql /var/lib/mysql_tmp/tmp/mysql_tmp
chmod 777 -R /var/lib/mysql_tmp

3. Копируем файлы из нынешней рабочей папки, в новую (TMPFS).

rsync -a /var/lib/mysql/ /var/lib/mysql_tmp/
rsync -a /var/lib/mysql/ /var/lib/mysql_arch/

4. Чтоб при включении перенести файлы из mysql_arch в mysql_tmp добавил в /etc/init.d/rc.local команду "rsync -a /var/lib/mysql_arch/ /var/lib/mysql_tmp/":

nano /etc/init.d/rc.local

И допишите в конец файла

rsync -a /var/lib/mysql_arch/ /var/lib/mysql_tmp/

 
5.Теперь нужно-же сохранять изменения в mysql_arch при выключении сервера.
Тут немного сложнее. В /etc/init.d кидаем файлик такого содержания:

#!/bin/sh
rsync -a /var/lib/mysql_tmp/ /var/lib/mysql_arch/
exit 0

Обзываем S00ramdisk-sync-shutdown и ставим права на выполнение.

nano /etc/init.d/ramdisk-sync-shutdown
#Вставляем содержимое
chmod 7777 /etc/init.d/S00ramdisk-sync-shutdown

Теперь в папку /etc/rc0.d и /etc/rc6.d делаем символические ссылки с нашего файла: S00ramdisk-sync-shutdown. 

ln -s /etc/init.d/S00ramdisk-sync-shutdown /etc/rc0.d
ln -s /etc/init.d/S00ramdisk-sync-shutdown /etc/rc6.d

Все, теперь при выключении или перезагрузке содержимое нашего TMPFS будет сохранено на HDD в mysql_arch.

6. Ну и на последок не забываем про форсмажор - добавим задание в cron, чтобы копирование происходило каждых 20 минут.

crontab -e

и в конец файла вставить:

*/20 * * * * rsync -a /var/lib/mysql_tmp/ /var/lib/mysql_tmp_arch/

7. Теперь осталось добавить монтирование в fstab

nano /etc/fstab

Добавить в конец

tmpfs /var/lib/mysql_tmp tmpfs size=1024m 0 0

8. Теперь окончательно - поменяйте рабочий путь в файле конфигурации MySQL my.cnf

nano /etc/mysql/my.cnf

В секции "datadir = /var/lib/mysql_tmp"

Итак, вроде бы всё работает. Пока так и не понял насколько помогло - только обновил сервер, сайты ещё не перенёс, поэтому пока сказать не могу.
Если вдруг после ребута mysql откажется запускаться - попробуйте дать права на папку повторно.

chown mysql:mysql /var/lib/mysql_tmp/
chmod 777 -R /var/lib/mysql_tmp
Изменено пользователем NemoTec

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Benchmarking masteroff.com.ua (be patient)
Completed 500 requests
Completed 1000 requests
Completed 1500 requests
Completed 2000 requests
Completed 2500 requests
Completed 3000 requests
Completed 3500 requests
Completed 4000 requests
Completed 4500 requests
Completed 5000 requests
Finished 5000 requests


Server Software:        nginx/0.8.54
Server Hostname:        masteroff.com.ua
Server Port:            80

Document Path:          /
Document Length:        66791 bytes

Concurrency Level:      100
Time taken for tests:   126.952 seconds
Complete requests:      5000
Failed requests:        4999
   (Connect: 0, Receive: 0, Length: 4999, Exceptions: 0)
Write errors:           0
Non-2xx responses:      4475

 

Из 5000 запросов - 4475 не прошло.

Мой совет, нужно выбросить этот ноутбук с древним винтом, для хостинга магазина он точно не годится

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если расширить оперативку и натянуть в нее движек - будет повеселее, но боюсь в старом ноуте сильно не расширить, а нормальный ИМ имеет объем от 5гб и выше (у меня до 20 доходило вместе с файлами кэша). Еще как неплохая альтернатива - ssd накопитель (отклик в 60 раз быстрыее чем на hdd). 

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

грамотно настроенный mysql и так все нужные данные будет держать в RAM

http://stackoverflow.com/questions/11748629/how-to-figure-out-if-mysql-index-fits-entirely-in-memory

 

либо всю таблицу там держать http://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Наоборот спасибо. Подскажите, а как вы провели данный тест. Я только учусь, поэтому интересуюсь.

Мой совет, нужно выбросить этот ноутбук с древним винтом, для хостинга магазина он точно не годится

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

Еще как неплохая альтернатива - ssd накопитель (отклик в 60 раз быстрыее чем на hdd).

Знаю, у самого стоит OCZ Vertex 2, но на этот "серв" ставить безсмысленно...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тестировал утилитой ab http://www.ashep.org/2011/nagruzochnoe-testirovanie-web-servera/#.UW-rLLU559U

 

Если хостинг на ноутбуке бесплатный, то для разработки самое оно.

 

У меня просьба, попробуйте провести бенчмарк ноутбука. Давайте сравним с VPS, https://opencartforum.com/topic/16977-testim-svoi-vps-i-vds/?hl=unix

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

MySQL в TMPFS

Итак, только что у меня получилось завести MySQL в TMPFS. Я делал это на Ubuntu 13.04

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

 

1. Первым делом создаём две директории: "mysql_tmp" - рабочая папка MySQL в TMPFS и "mysql_arch" - папка для сохранения на жестком диске.

mkdir /var/lib/mysql_tmp
mkdir /var/lib/mysql_arch
2. Далее назначаем владельца рабочей папки, и делаем её доступной для записи

chown mysql:mysql /var/lib/mysql_tmp/tmp/mysql_tmp
chmod 777 -R /var/lib/mysql_tmp
3. Копируем файлы из нынешней рабочей папки, в новую (TMPFS).

rsync -a /var/lib/mysql/ /var/lib/mysql_tmp/
rsync -a /var/lib/mysql/ /var/lib/mysql_arch/
4. Чтоб при включении перенести файлы из mysql_arch в mysql_tmp добавил в /etc/init.d/rc.local команду "rsync -a /var/lib/mysql_arch/ /var/lib/mysql_tmp/":

nano /etc/init.d/rc.local
И допишите в конец файла

rsync -a /var/lib/mysql_arch/ /var/lib/mysql_tmp/
 

5.Теперь нужно-же сохранять изменения в mysql_arch при выключении сервера.

Тут немного сложнее. В /etc/init.d кидаем файлик такого содержания:

#!/bin/sh
rsync -a /var/lib/mysql_tmp/ /var/lib/mysql_arch/
exit 0
Обзываем S00ramdisk-sync-shutdown и ставим права на выполнение.

nano /etc/init.d/ramdisk-sync-shutdown
#Вставляем содержимое
chmod 7777 /etc/init.d/S00ramdisk-sync-shutdown
Теперь в папку /etc/rc0.d и /etc/rc6.d делаем символические ссылки с нашего файла: S00ramdisk-sync-shutdown. 

ln -s /etc/init.d/S00ramdisk-sync-shutdown /etc/rc0.d
ln -s /etc/init.d/S00ramdisk-sync-shutdown /etc/rc6.d
Все, теперь при выключении или перезагрузке содержимое нашего TMPFS будет сохранено на HDD в mysql_arch.

6. Ну и на последок не забываем про форсмажор - добавим задание в cron, чтобы копирование происходило каждых 20 минут.

crontab -e
и в конец файла вставить:

*/20 * * * * rsync -a /var/lib/mysql_tmp/ /var/lib/mysql_tmp_arch/
7. Теперь осталось добавить монтирование в fstab

nano /etc/fstab
Добавить в конец

tmpfs /var/lib/mysql_tmp tmpfs size=1024m 0 0
8. Теперь окончательно - поменяйте рабочий путь в файле конфигурации MySQL my.cnf

nano /etc/mysql/my.cnf
В секции "datadir = /var/lib/mysql_tmp"

Итак, вроде бы всё работает. Пока так и не понял насколько помогло - только обновил сервер, сайты ещё не перенёс, поэтому пока сказать не могу.

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

chown mysql:mysql /var/lib/mysql_tmp/
chmod 777 -R /var/lib/mysql_tmp

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

спасибо.

ушло в FAQ

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно ли использовать RAMFS для хранения кешей vqmod/vqcache и system/caсhe ?

Есть ли в этом смысл?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Провел эксперимент. Смонтировал tmpfs командой

mount -t tmpfs -o size=200m tmpfs /opt/ram

Папки vqmod/vqcache и system/caсhe а также smartoptimizer/cache сделал как ссылки в /opt/ram

Теперь кеш создается в памяти. Прироста производительности не заметил.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Похожий контент

    • От markimax
      990.00 руб
      Скачать/Купить дополнение


      Jet Cache - кеширование, оптимизация для магазинов

       

      Логин / пароль:
      demo / demo
       
      Документация  
      Более 10`000 интернет магазинов выбрали SEO CMS для работы
      SEO CMS JET CACHE :: Jet Cache - быстрая система кеширования страниц, контроллеров и методов моделей opencart

      Версия под opencart 3.x высылается по запросу
      Возможности
       
      - кеширует полностью страницы при полной интеграции с opencart (позволяет кешировать и для зарегистрированных пользователей и изменений корзины а также в зависимости от изменений в модулях)  
      - кеширует выбранные контроллеры (т е фактически  любые модули, будь то меню или т.п. а также полностью кеширует позиции (уникальная технология которая не реализовано ни в одном модуле кеширования для opencart) (с))  
      - кеширует методы моделей opencart (подсчет количества товаров и т п )  
      - простая установка и обновление  
      - гибкие настройки  
      - поддержка мультиязычности  
      - поддержка мультимагазинов  
      - поддержка протоколов https и http  
      - гибкая взаимосвязь с любым функционалом платформы SEO CMS  
      - совместимость с любой темой, любыми модулями, которые соответствуют стандартам программирования  
      - поддержка кеширования sitemap Чем модуль лучше других
       
      - уникальные технологии кеширования не имеющие аналогов в opencart (уникальная технология полной интеграции с opencart, в отличии от всех кешировщиков которые сделанны по технологии v2pc)  
      - модуль работает с любыми темами и модулями Требования
       
      Opencart 2.x или любая сборка на нем (ocStore, Opencart.PRO, или другие) PHP 5.3 или выше Модуль НЕ заменяет файлы системы Модуль НЕ использует ioncube  
      Совместимость модуля
       
      Opencart 2.x или любая сборка на нем (ocStore, Opencart.PRO, или другие) Любая тема или любые модули (которые сделаны без ошибок, согласно стандартов программирования или верстки) для оpencart 2.x  
      Установка, настройка
       
      Если пользователь хочет чтобы сотрудник службы технической поддержки проделал работу по установке и настройке модуля вместо пользователя на сервере пользователя, это уже услуга + 590 рублей  
      Лицензия Все права на модуль принадлежат разработчикам opencartadmin.com Условия использования лицензии: один домен - одна лицензия (покупка продукта для каждого домена). Условия использования лицензии - "на владельца". Далее... Добавил markimax Добавлено 15.03.2017 Категория Кэширование, сжатие, ускорение Системные требования PHP 5.3+ Сайт разработчика https://opencartadmin.com/seo-cms-jet-cache.html Старая цена 590 Метод активации Через официальный сайт дополнения Ioncube Loader Нет OpenCart 3.0
      2.3
      2.2
      2.1
      2.0
      1.5.6.4
      1.5.6.3
      1.5.6.2
      1.5.6.1
      1.5.6
      1.5.5.1
      1.5.5
      1.5.4.1
      1.5.3.1 ocStore 2.3
      2.2
      2.1 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1
      OcShop 2.0.3.х
      OcShop 1.5.6.4.х  
    • От Yoda
      Буквально несколько недель назад Hetzner, пытаясь остаться в тренде, запустил cloud сервис аналогичный Amazon W3 или Digital Ocean.
      Выглядит очень круто - от 3 евро за юнит(2 гига RAM 20 гиг диска), NVME-диски, и даже есть возможность купить не виртуально ядро в виде какого-то потока HyperThread,  а полноценный кусок процессора, правда от 23 евро за 2 виртуальных ядра - но это тоже круто.
       
      И очень меня эти три евры за выделенный юнит заманили, взял я под новый проект себе на пробу, и был приятно удивлен, что оно работает быстрее подавляющего числа доступных VPS, да и деплой реально в три секунды.
       
      Почему же это зло?
      После некоторых тестов, выяснилось что на самом деле, не все так хорошо как на фасаде. Я взял сервер, для блога на Wordpress, поставил php 7.2, и он просто полетел.

      Но когда мы взяли 4 ядра 160 гигабайт юнит, при переносе и холодном старте все оказалось быстро (главная страница магазина на 160 000 товаров грузилась за 150мс), но вот через полчаса после переноса DNS и появления  нагрузки, вдруг 150мс превратиилсь в 600, при том что нагрузка на процессоре была не больше 20-25% и памяти свободной вагон.
       
      После аудита, обнаружилась очень простая и достаточно логичная проблема. 
      В силу использования модуля кеширования  (не буду уточнять какого), в кеш набилось  за 20 минут порядка 5000 файлов. В целом, если у вас просто кусок сервера, или обычный VPS  - это немного и не повлечет таких проблем просадки в скорости. Но у нас же клауд. Соответственно данные на диске динамически реплицируются и синхронизируются на несколько узлов (и это ни фига не быстрый RAID). Вобщем оказалось что такой побочный эффект облачной виртуализации казалось бы напрочь убил возможность использования площадки под большой проект. Но выжигание кривого кеширования, правильная общая оптимизация системы и установка Redis спасла отцов русской демократиии от фиаско.
       
      Так что друзья, клауд - это хорошо но не очень, и не каждый модуль кеширования такой полезный как пишут в ваших этих интернетах, и если вы хотите оптимизировать большой магазин, возможно стоит изначально смотреть в сторону аренды выделенного сервера с производительной файловой системой, и использовать техники оптизимиации, отличные от кеширования.
       
       
    • От p0v1n0m
      Скачать/Купить дополнение


      Чистильщик кэша и логов
      Модуль поможет очистить кэш и логи одним кликом, находясь на любой странице админки.
       
      Установка:
      1. Загрузить скачанный архив для своей версии движка через Установщик дополнений.
      2. Очистить и Обновить кэш в Менеджере дополнений.
      3. Установить и включить модуль.
      Добавил p0v1n0m Добавлено 15.08.2016 Категория Кэширование, сжатие, ускорение Системные требования Сайт разработчика https://github.com/p0v1n0m/opencart_storage_cleaner Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 2.3
      2.2
      2.1 ocStore 2.3
      2.2
      2.1 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1  
    • От p0v1n0m
      Модуль поможет очистить кэш и логи одним кликом, находясь на любой странице админки.
       
      Установка:
      1. Загрузить скачанный архив для своей версии движка через Установщик дополнений.
      2. Очистить и Обновить кэш в Менеджере дополнений.
      3. Установить и включить модуль.
    • От markimax
      Логин / пароль:
      demo / demo
       
      Документация  
      Более 10`000 интернет магазинов выбрали SEO CMS для работы
      SEO CMS JET CACHE :: Jet Cache - быстрая система кеширования страниц, контроллеров и методов моделей opencart

      Версия под opencart 3.x высылается по запросу
      Возможности
       
      - кеширует полностью страницы при полной интеграции с opencart (позволяет кешировать и для зарегистрированных пользователей и изменений корзины а также в зависимости от изменений в модулях)  
      - кеширует выбранные контроллеры (т е фактически  любые модули, будь то меню или т.п. а также полностью кеширует позиции (уникальная технология которая не реализовано ни в одном модуле кеширования для opencart) (с))  
      - кеширует методы моделей opencart (подсчет количества товаров и т п )  
      - простая установка и обновление  
      - гибкие настройки  
      - поддержка мультиязычности  
      - поддержка мультимагазинов  
      - поддержка протоколов https и http  
      - гибкая взаимосвязь с любым функционалом платформы SEO CMS  
      - совместимость с любой темой, любыми модулями, которые соответствуют стандартам программирования  
      - поддержка кеширования sitemap Чем модуль лучше других
       
      - уникальные технологии кеширования не имеющие аналогов в opencart (уникальная технология полной интеграции с opencart, в отличии от всех кешировщиков которые сделанны по технологии v2pc)  
      - модуль работает с любыми темами и модулями Требования
       
      Opencart 2.x или любая сборка на нем (ocStore, Opencart.PRO, или другие) PHP 5.3 или выше Модуль НЕ заменяет файлы системы Модуль НЕ использует ioncube  
      Совместимость модуля
       
      Opencart 2.x или любая сборка на нем (ocStore, Opencart.PRO, или другие) Любая тема или любые модули (которые сделаны без ошибок, согласно стандартов программирования или верстки) для оpencart 2.x  
      Установка, настройка
       
      Если пользователь хочет чтобы сотрудник службы технической поддержки проделал работу по установке и настройке модуля вместо пользователя на сервере пользователя, это уже услуга + 590 рублей  
      Лицензия Все права на модуль принадлежат разработчикам opencartadmin.com Условия использования лицензии: один домен - одна лицензия (покупка продукта для каждого домена). Условия использования лицензии - "на владельца". Далее...
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.