Колко RAM да заделя за MySQL

От: Колко RAM да заделя за MySQL

# Protect files and directories from prying eyes.
<FilesMatch "\.(engine|inc|info|install|make|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?|xtmpl|svn-base)$|^(code-style\.pl|Entries.*|Repository|Root|Tag|Template|all-wcprops|entries|format)$">
Order allow,deny
</FilesMatch>

# Don't show directory listings for URLs which map to a directory.
Options -Indexes

# Follow symbolic links in this directory.
Options +FollowSymLinks

# Make Drupal handle any 404 errors.
ErrorDocument 404 /index.php

# Force simple error message for requests for non-existent favicon.ico.
<Files favicon.ico>
# There is no end quote below, for compatibility with Apache 1.3.
ErrorDocument 404 "The requested file favicon.ico was not found.
</Files>

# Set the default handler.
DirectoryIndex index.php

# Override PHP settings. More in sites/default/settings.php
# but the following cannot be changed at runtime.

# PHP 4, Apache 1.
<IfModule mod_php4.c>
php_value magic_quotes_gpc 0
php_value register_globals 0
php_value session.auto_start 0
php_value mbstring.http_input pass
php_value mbstring.http_output pass
php_value mbstring.encoding_translation 0
</IfModule>

# PHP 4, Apache 2.
<IfModule sapi_apache2.c>
php_value magic_quotes_gpc 0
php_value register_globals 0
php_value session.auto_start 0
php_value mbstring.http_input pass
php_value mbstring.http_output pass
php_value mbstring.encoding_translation 0
</IfModule>

# PHP 5, Apache 1 and 2.
<IfModule mod_php5.c>
php_value magic_quotes_gpc 0
php_value register_globals 0
php_value session.auto_start 0
php_value mbstring.http_input pass
php_value mbstring.http_output pass
php_value mbstring.encoding_translation 0
</IfModule>

# Requires mod_expires to be enabled.
<IfModule mod_expires.c>
# Enable expirations.
ExpiresActive On

# Cache all files for 2 weeks after access (A).
ExpiresDefault A1209600

<FilesMatch \.php$>
ExpiresActive Off
</FilesMatch>
</IfModule>

# Various rewrite rules.
<IfModule mod_rewrite.c>
RewriteEngine on
# Rewrite URLs of the form 'x' to the form 'index.php?q=x'.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</IfModule>


Конвертнах го аз през сайта, но къде трябва да го сложа после кода пак в виртуалните хостове предполагам
 
От: Колко RAM да заделя за MySQL

В server block-a.

Само нещата за rewrite ти трябват.

Код:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

Код:
location / {
  if (!-e $request_filename){
    rewrite ^(.*)$ /index.php?q=$1 break;
  }
}

Като начало за да го пуснеш. Другите като разбереш как работи ще ти стане ясно. Мисля, че така трябва да тръгне ако останалите неща са както трябва.

И отбягвай IF.
 
От: Колко RAM да заделя за MySQL

Ами тръгна май донякъде само дето сега вместо да ми отвори страницата я изтегля. Те самите страница са нещо от вида mydomain.com/node/1111 тоест не завършват с някакво разширение.
 
От: Колко RAM да заделя за MySQL

Тествай си с phpinfo. Щом ги "изтегля" означава, че не работи пхп. Сега ще ти дам примерни конфове.

Nginx
Код:
server {

                listen 80;
                server_name domain.com www.domain.com;

                root /var/www/domain.com/htdocs;

               
                location ~ \.php$ {
                                include fastcgi.conf;
                                try_files $uri =404;
                                fastcgi_intercept_errors on;
                                fastcgi_pass 127.0.0.1:8000;
                }


        }

php-fpm
Код:
[test]
listen = 127.0.0.1:8000

user = test
group = test

pm = dynamic
pm.start_servers = 2
pm.max_children = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 2

CentOS? И си ги инсталирал от репосите, нали така?

Тук сложи конфа за пхп.
Код:
nano /etc/php-fpm.d/test.conf
За Nginx си направи една папка my-sites

mkdir /etc/nginx/mysites

И там пльосни конфа, който ти дадох, хем да си мажеш на воля. Кръсти го domain.com.conf примерно.

След това го добави в nginx.conf с include.

include /etc/nginx/my-sites/*.conf;

Мисля, че ако го сложиш най-отдолу преди последната } трябва да стане. Ако не пусни nginx.conf да ти кажа къде.

Edit: а да, user трябва да го има на Линукса.

useradd test
После само му махни шел достъпа от /etc/passwd , за всеки случай.
 
Последно редактирано:
От: Колко RAM да заделя за MySQL

Ами ако не работеше php то не би ли трябвало да не отваря и началната страница.

Единственото Virtual Directory Support disabled може да създава проблеми. Другите неща ми изглеждат наред.
 
От: Колко RAM да заделя за MySQL

Виж какво написах в предното мнение.

Аз карам така:

Тествам дали уеб сървъра работи с някакъв html файл.

Тествам php.

И ако всичко е наред си пускам и сайта, после вече си играя ако има някакви rewrites.

за html
Код:
echo "Hello World" > /var/www/domain.com/htdocs/test.html

за php
Код:
echo '<?php phpinfo(); ?>' >> /var/www/domain.com/htdocs/phpinfo.php
или там както си свикнал
 
От: Колко RAM да заделя за MySQL

Това вече го оставям за утре, че се побърках днес цял ден, вече мозъка ми не реагира нещо :)
 
От: Колко RAM да заделя за MySQL

Абе аз че го подкарах подкарах го ама, имаше много memory leaks, fragmentation. 2 от сайтовете ту ги отваряше ту не и отложих временно преместването. Те всичките сайтове са на една и съща контент мениджмънт система и в момента ги подготвям за multy site инсталация да споделят кода от едно място че opcode optimizatora да работи както трябва. Че миналия път изведе много подобни грешки че няма достатъчно памет в memory pool.

Незнайно защо и потреблението на RAM скочи до небесата, 2 часа през ноща гигабайт и нещо при положение че има 10 човека онлайн. Мисля че се получи заради тези настройки тука дето са по default:
pm.max_children = 50
pm.min_spare_servers = 5
pm.max_spare_servers = 35

Като почнах да ги смъква взе да пада, но не съм ги смъкнал чак до настройките дето са в линка.

Аз и за nginx бях задал май повечко worker_processes, че пишеше да зададем броя на ядрата по 2. Но аз му зададох броя на ядрата в моя случай 4.

Нея вечер закона на Мърфи беше в пълна сила всичко се скапа. php-fpm не комуникираше добре със сървъра се свързваше само през root паролата и то понякога много бавно. Apacheto не ебаваше host настройките. Направо не знам какво стана.

Предния ден пък поисках от хостинга да ми сменят php версията от 5.2 на 5.3.3 и при тях нещо тотално се скапа и от 21:00 до 4:00 едвам ги подкараха нещата, а трябваше да отнеме 10мин.

Този пък ще се подготвя добре за да няма изненади.

Ще тествам различни варианти за конфигурация nginx, httpd, lighthttpd. с различните им версии да видим кое ще върви най-добре. Може да ползвам даже varnish системата с която работя има модул за пращане на заявки за изтичане на кеша, но с това не ми се занимава много, че в момента работя по новата версия на сайта и без това след няколко месеца ще се сменя и най-вероятно ще влезе в новата версия.

Това pm дали не е по добре да се остави на статично 1 или 2 pm.min_spare_servers=1 pm.max_spare_servers=1. и самите pm.max_children да се качат повече. Че за fastcgi примерно знам че всеки процес си поддържа отделен APC кеш само childrens вътре могат да го споделят.

В тази статийка май предлагаха нещо подобно:
http://www.brandonturner.net/blog/2009/07/fastcgi_with_php_opcode_cache/
 
От: Колко RAM да заделя за MySQL

Погледна ли хубаво настройките за буфер и кеш?
 
От: Колко RAM да заделя за MySQL

pm.max_children = 50
pm.min_spare_servers = 5
pm.max_spare_servers = 35

Да, от тук могат да се контролират настройките за childs и т.н. Има страшно много опции там, разгледай документацията. Контрола в сравнение с mod_php е много по-добър.

ps -ylC php-fpm --sort:rss

или

Код:
ps -ylC php-fpm --sort:rss | awk '!/RSS/ { s+=$8 } END { printf "%s\n", "Total memory used by PHP-FPM child processes: "; printf "%dM\n", s/1024 }'

Така можеш да видиш всеки процес колко рам използва в момента. Зависи от много неща колко ще бъде стойността.

max_children се изчислява така:

pm.max_children = рам на сървъра / размер на child

Аз лично спазвам принципа - ако има рам, използвай я. Не да седи празна. А и обикновено моите сървъри са с поне 12гб. Но тестовия блог например ми е с едва 600мб и с 500-600 уникални посетители на ден сайта заема само 200-300мб (от които в момента малко над 100мб са заети от mariadb)

z.png

Код:
S   UID   PID  PPID  C PRI  NI   RSS    SZ WCHAN  TTY          TIME CMD
S   502  9752  9749  0  80   0  4196 71005 inet_c ?        00:00:00 php-fpm
S   502  9753  9749  0  80   0  4196 71005 inet_c ?        00:00:00 php-fpm
S   501  9754  9749  0  80   0  4196 71005 inet_c ?        00:00:00 php-fpm
S   501  9755  9749  0  80   0  4196 71005 inet_c ?        00:00:00 php-fpm
S     0  9749     1  0  80   0  5020 71022 ep_pol ?        00:00:04 php-fpm
S   504 13999  9749  0  80   0 29856 76613 skb_re ?        00:00:01 php-fpm
S   504 13993  9749  0  80   0 33620 77530 skb_re ?        00:00:02 php-fpm
S   504 13998  9749  0  80   0 33768 77659 skb_re ?        00:00:01 php-fpm
S   504 13994  9749  0  80   0 35992 79313 skb_re ?        00:00:01 php-fpm
S   504 13991  9749  0  80   0 37092 79761 skb_re ?        00:00:01 php-fpm

Код:
Total memory used by PHP-FPM child processes:
188M

Дали да е dynamic зависи от това дали искаш сайта да е готов за внезапен пик. Аз предпочитам dynamic, защото така не се притеснявам дали няма да спре нещо при повечко трафик.

min и max spare servers зависят от очаквания трафик. Общо взето всички настройки за pool-a на сайта зависят от този очакван трафик.

Аз вече използвам главно php5.5 със ZendOptimizer+. Но и 5.4 с APC дава доста по-добри резултати от 5.3 и 5.2 така че пробвай и с 5.4

За какъв трафик и колко посетители говорим тук? Редно е да настроиш и Mysql сървъра колко точно рам да използва. Понякога просто се налага да се търси сървър с повечко рам. В крайна сметка днес това е доста евтин ресурс.

П.П. - как така успя да скапеш нещо? Не тестваш ли на пробен сървър първо? :)

П.П.2 - ако искаш мога да ти дам достъп до един тестов сървър където всичко е настроено. Трябва само сайта да се качи и да се направи server block-a. Настройките за php-fpm са лесни. Той също е с 1гб рам както при вас.

П.П.3 - това не е ли VPS? Защо хоста да ти сменят php версията?
 
Последно редактирано:
От: Колко RAM да заделя за MySQL

Ами тествах го уж вървеше добре, но после почна на 2 от сайтовете да дава грешка явно като се препълни кеша на APC 96M, като го изключих грешката изчезна. Имаше го и момента че php-fpm нещо не приемаше никакви други потребители за mysql(MariaDB) освен root, при apacheto си работеха.

То точно към пробния сървър насочих dns и те. Синхронизирах първо качих ресурсите до същото равнище и насочих временно вечерта да видя как ще тръгне. Но като видях че и RAM а скача много върнах към стария сървър.

На ден: Около 14 000 посещения, 9000 уникални, 55 000 импресии, Макс онлайн около 300-350

Това са долу горе общо за новинарските сайтове които са 4 на брой.

На сървъра има още 6 сайта, но за тях ползвам един модул който ги кешира до html и се обновява кеша много рядко. Те са бизнес сайтове и към тях няма толкова посещения и не се изпълнява php. Да кажем още около + 500 посещения и за тях общо.

В момента сървъра е с Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz, 5 cores 2GB RAM и преди малко пак имаше голямо натоварване и блокира тотално. Едвам се рестартираше. Но обикновено като е с такива параметри върви добре случва се по рядко да има проблем.

Преди беше на Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz, 4 cores 1.6GB RAM. Но с тези параметри забива по няколко пъти на ден и за това ги качвам сутрин и ги връщам вечерно време на старите.

Проблемите реално са между 11:30 - 17:30, през останалото време си работи добре. Но като гледам през tyxo-то няма чак толкова много посетители онлайн макс да стигат 300-350 за всички общо и импресиите се качват нормално все пак някои четат нещо през това време други може даже вече да са излезли.

Нека първо оправя сайтовете да споделят общ код от едно място и ако има нещо ще пиша, даже мога като са готови нещата да ти дам достъп да хвърлиш едно око на бързо.

Ами това e VM на cloud server.

Защото аз се запознах с linux официално преди има няма една седмица. В смисъл някои основни неща ги знаех, налага се като web developer да правиш някои неща по сървъра но общо взето нещата се свеждаха до yum install и администрация през webmin :) имам и някои теоретични познания но на практика не съм се занимавал почти никога със сървъри. Като им пиша на хоста да ми сложат нещо го правят, все пак като знаеш какво правиш отнема 1-2 мин.

Преди ми малко като блокира ми писаха от хоста че проблема е бил че MySQL генерирало високо дисково натоварване и след reair и optimize се оправило.

Имам една innodb база данни за най-натоварения и останалите са myisam, мисля да ги конвертна всичките на xtradb и да мина на percona server мислиш ли че това би подобрило нещата. В сайта им пише че натоварването с техния сървър било по малко и по предсказуемо без внезапни пикове и самия storage бил по добър.
 
От: Колко RAM да заделя за MySQL

Ясно. Ами не става само с yum install и да очакваш да работи. Особено при този трафик. Ако бях на твое място щях да взема някой от сайтовете с по-малко посещения и да го пусна на един такъв тестов сървър. Там вече ще се нагласи някакъв мониторинг за по-лесна диагностика и могат да се оптимизират нещата за да работят, а след това и за да работят леко и бързо. Решения има страшно много когато сървъра е VPS или нает.

За Percona не знам, тук съм пас. Запознат съм само с mySQL и MariaDB като скоро навсякъде ще мина на MariaDB 10. Какъв тип таблици е най-добре ще зависи от вида заявки. Тук отново съм пас като цяло, след време ще си поиграя именно с тях.

Започни от някъде. Дали ще е пхп и колко рам оптимално заема всеки процес за да прецениш рамта стига ли. Или пък mysql, там за начало също провери как стоят нещата с рамта. Къде какво пише не знам, аз обикновено първо проверявам дали наистина е така.

Би трябвало да успееш да се вмъкнеш в 2гб рам. Зависи сайтовете колко харчат. Ако приемем, че един тежък CMS заема около 30мб на процес, то 2гб трябва да стигне за поне 4 сайта. Това при положение, че в сметката влиза и памет за mysql. Съдя по Wordpress, защото основно с него се занимавам.

Ако става въпрос за php-fpm, mysql/mariadb и nginx винаги мога да ти помогна. Няма нищо сложно в администрацията на Linux - четеш manuals/white papers и гледаш логове. Той сървъра сам си казва какво му е. :beer:

Ето още един пример: днес php-fpm се оплака, че max children са малко.

Код:
[20-Jun-2013 08:33:31] WARNING: [pool rstefanov.org] server reached pm.max_children setting (10), consider raising it

Съответно всичко, което трябва да направя е да вдигна тази стойност.
 
Re: От: Колко RAM да заделя за MySQL

Ами тествах го уж вървеше добре, но после почна на 2 от сайтовете да дава грешка явно като се препълни кеша на APC 96M, като го изключих грешката изчезна. Имаше го и момента че php-fpm нещо не приемаше никакви други потребители за mysql(MariaDB) освен root, при apacheto си работеха.

То точно към пробния сървър насочих dns и те. Синхронизирах първо качих ресурсите до същото равнище и насочих временно вечерта да видя как ще тръгне. Но като видях че и RAM а скача много върнах към стария сървър.

На ден: Около 14 000 посещения, 9000 уникални, 55 000 импресии, Макс онлайн около 300-350

Това са долу горе общо за новинарските сайтове които са 4 на брой.

На сървъра има още 6 сайта, но за тях ползвам един модул който ги кешира до html и се обновява кеша много рядко. Те са бизнес сайтове и към тях няма толкова посещения и не се изпълнява php. Да кажем още около + 500 посещения и за тях общо.

В момента сървъра е с Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz, 5 cores 2GB RAM и преди малко пак имаше голямо натоварване и блокира тотално. Едвам се рестартираше. Но обикновено като е с такива параметри върви добре случва се по рядко да има проблем.

Преди беше на Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz, 4 cores 1.6GB RAM. Но с тези параметри забива по няколко пъти на ден и за това ги качвам сутрин и ги връщам вечерно време на старите.

Проблемите реално са между 11:30 - 17:30, през останалото време си работи добре. Но като гледам през tyxo-то няма чак толкова много посетители онлайн макс да стигат 300-350 за всички общо и импресиите се качват нормално все пак някои четат нещо през това време други може даже вече да са излезли.

Нека първо оправя сайтовете да споделят общ код от едно място и ако има нещо ще пиша, даже мога като са готови нещата да ти дам достъп да хвърлиш едно око на бързо.

Ами това e VM на cloud server.

Защото аз се запознах с linux официално преди има няма една седмица. В смисъл някои основни неща ги знаех, налага се като web developer да правиш някои неща по сървъра но общо взето нещата се свеждаха до yum install и администрация през webmin :) имам и някои теоретични познания но на практика не съм се занимавал почти никога със сървъри. Като им пиша на хоста да ми сложат нещо го правят, все пак като знаеш какво правиш отнема 1-2 мин.

Преди ми малко като блокира ми писаха от хоста че проблема е бил че MySQL генерирало високо дисково натоварване и след reair и optimize се оправило.

Имам една innodb база данни за най-натоварения и останалите са myisam, мисля да ги конвертна всичките на xtradb и да мина на percona server мислиш ли че това би подобрило нещата. В сайта им пише че натоварването с техния сървър било по малко и по предсказуемо без внезапни пикове и самия storage бил по добър.

аз нали съм по кисс солюшъните защо не работиш около проблема :) не че има лошо да го решиш генерално и веднъж завинаги както r.stevanov предлага

но например кеша на APC да го направиш 256 MB и да го следиш освен това по статиите за оптимизация на магенто цмс който си е тежичко съм виждал да дават 256мб минимум препоръчително че даже и 512 :) и това е за сингъл инсталация :)

и още едно полвиначато решение за което доста сисадмини ще ме нахранят ама решението действа и съм виждал да го предлагат в убехостинг талк поне няколко пъти за най различни проблеми :) значи те така или иначе препоръчват веднъж на ден да си чистищ апц кеша за да не се фрагментира много :) аз ти казвам на база четене на уебхостинг талк пусни го веднъж с един крон веднъж на час да го чисти :) ще имаш само няколко минути по бавна работа докато го понапълни и няма да го мислиш токова


примери за чистенето
http://linuxaria.com/howto/everything-you-need-to-know-about-apc-alternate-php-cache?lang=en
http://stackoverflow.com/questions/911158/how-to-clear-apc-cache-entries
 
От: Колко RAM да заделя за MySQL

Те по начало сървърите са конфигурирани от хостинга ни вече до колко адекватно не мога да кажа със сигурност, имах в предвид че до преди няколко дни не знаех друг начин за инсталиране на допълнителни програми от yum install, не знаех че mysql има алтернативи и даже нямах идея какво е repository и се уча в движение в момента.

Знаеш ли някой добър tool за мониторинг на процесите и до колко може да се разчита на това #top

И с какво си правиш стрес тестовете.
 
От: Колко RAM да заделя за MySQL

coolice

Ще си поиграя малко първо и с други оптимизатори да видим кой ще даде най-малко грешки с default настройките и после ще започна да експериментирам с него. Иначе и аз съм го правил това с clear cache.

А иначе CMS а е Pressflow(Drupal) и няма много включени модули.
 
ама така кажи че си друпал тои си има и дисков кеш с който яде много малко рам

има си и модули за мемкешъд с който няма да го познаеш и като цпу и като поведение :)
 
От: Колко RAM да заделя за MySQL

Те по начало сървърите са конфигурирани от хостинга ни вече до колко адекватно не мога да кажа със сигурност, имах в предвид че до преди няколко дни не знаех друг начин за инсталиране на допълнителни програми от yum install, не знаех че mysql има алтернативи и даже нямах идея какво е repository и се уча в движение в момента.

Знаеш ли някой добър tool за мониторинг на процесите и до колко може да се разчита на това #top

И с какво си правиш стрес тестовете.

top си е много надежден инструмент :) заедно с htop. yum install htop (има го в epel репоса).

Ако ти трябва нещо по-сериозно може да опиташ New Relic от готовите решения (имат безплатен пакет и много удобно API). Nagiox и Zabbix също, те обаче са self hosted. Не че няма платени хостинг услуги и за тях де.

Стрес - apache benchmark, siege, JMeter и няколко платени услуги ползвам.

Edit: Ха, Друпал ли бил CMS-a :lol: Значи като решиш направо мога да ти пратя конфове, които са от работещи сайтове, без проблеми от както са пуснати. При това доста тежки. Като ги преместя на сървър с Apache и mod_php там нещата стават :twisted:
 

Горе