Последната седмица или две имам доста проблеми с един сървър. Положението е такова, че поставих още един сайт на него освен този, който се хостваше например. Сайта представлява авторска система за ротиране на банери, която засега е единствено за вътрешно ползване на местата, където рекламирам brutali.com (някои не малки български торент сайтове и гейм форуми). В пиковите часове заявките към тази система за банери са доста и списъка с кънекции към уеб сървъра не е никак къс. Това го натоварва и понякога зависва или качва много loads. Предприех следните стъпки:
1) Ъпгрейд на RAM паметта – даде много добър ефект. Понижи много натоварването на сървъра, но уви не реши проблема. Понякога apache2 забива и уж върви, но сайтове не показва, което продължи да не ми е особено приятно : )
2) Написах си мониторинг на сървъра, който помогна с две неща:
- Ако натоварването е по-високо от нормалното, то значи има някакъв проблем на лице (забили дъщерни процеси на apache-то или някой зависнал cron job) и когато го забележа бягам на сървъра да го оправям.
- Ако натоварването е нулево, явно apache-то е зависнало и бягам да го рестартирам.
Ето и скрийншот от самия мониторинг: линк
3) По идея на колегата ми в host.bg – Йордан Георгиев – написах едно скриптче за мониторинг на уеб сървъра. Метода му на работа е да проверява на всеки 2 минути дали се отваря някой от сайтовете разположени на сървъра и ако не се отваря да рестартира (ако е забило) или да го стартира (ако е спряло поради някаква причина) apache-то. От 2 дни наблюдението ми показва, че скриптчето върши идеална работа. Настроил съм го и да ми праща sms-и ако е станало нещо нередно, като за всяко извършено действие за оправяне на нещата ми изпраща съобщение със статуса на предприетите действия и това какъв резултат са дали (дали сайтовете са вече наред или пък че проблема е все още на лице). Скрипта е писан на PHP
Дали тези предприети действия са дали резултат ще стане ясно следващите дни или седмица, като се надявам това да е така, защото освен на мен тези проблеми създадоха доста неудобства и на потребителите ползващи сайтовете разположени на сървъра.
Edit: Ето примерен скрипт за точка 3:
Тази сутрин се сблъсках с интересен проблем, занимавайки се с една мини тикет система за единия от сайтовете ми (brutali.com). PHP функцията substr() не работи коректно с UTF-8 енкодинг, защото при него всеки символ е по 2 байта. Ето пример:
substr(‘Тест текст’, 0, 7);
Използваната функция ще върне: Тес?
При използването сме указали да ни покаже първите 7 символа в задения текст, а за функцията това значи първите 7 байта. В UTF-8 всеки символ като е по 2 байта показва само първите 3 букви, а от третата показва половината или по-точно нищо
. Този проблем го има само с кирилицата, с латиница и числа проблем няма. Ето и моето решение на проблема, след като изчетох няколко материала за фиксване като този и този, но нещо не ми помогнаха и се позамислих… семпло и работещо 100%:
Алгоритъм на действията:
1. Обръщаме стринга в CP1251
2. Режем каквото ни трябва от текста със substr()
3. Обръщаме изходящия текст в UTF-8 и го ползваме за каквото ни трябва
<?php
$mytext = “Кирилица”;
echo iconv(‘cp1251′, ‘utf-8′, substr(iconv(‘utf-8′, ‘cp1251′, $mytext), 0, 5));
?>
Въпросния код ще покаже текста: Кирил
Забележка: Гурутата да не ме нападнат, че не чета php.net и не знам какво е mbstring, при който функцията е mb_substr, но въпросния модул го нямам зареден на тази машина…