[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Падает сервер, не знаю как определить причину
Страницы: 1, 2
yuriy
I++
Письмо с ссылкой на архив с временем последнего падежа отправил вам на почту.

_____________
void x;
I++
Почты у меня нет, напишите в личку smile.gif

P.S Так исторически сложилось, все никак почту не заведу на форуме
yuriy
I++
Отправил и туда тоже.

_____________
void x;
VELIK505
Юра у тебя du сильно много жрёт оперативы и сервер уходит в свап и зависает. Покажи пацанам как ты организовал конструкцию определения скоко в папке осталось свободного места. Это у тебя тонкое место. Уверен на 90% что реализация не совсем правильная в плане кода.
А процессор у тебя mysql грузит на 80-90% это уже беда sql запросов. Тяжёлые запросы у тебя в mysql.log должны писаться которые больше 1 сек. выполняються. Так же через mytop можешь отследить тяжёлые запросы
I++
Свернутый текст
user.log


Feb 7 21:15:09 serv shutdown[3825]: shutting down for system halt
Feb 7 21:20:08 serv shutdown[2438]: shutting down for system reboot
Feb 10 05:00:17 serv shutdown[16196]: shutting down for system halt // Кто ребутит в 5 утра?

syslog

Feb 8 09:51:15 serv kernel: Free swap = 0kB // Сожрали память и своп.

Feb 8 09:51:15 serv kernel: Total swap = 522104kB
Feb 8 09:51:15 serv kernel: [<c108a2b0>] ? oom_kill_process+0x160/0x2a0 // oom killer
Feb 8 09:51:15 serv kernel: [<c108a9c4>] ? out_of_memory+0x54/0xb0 // память была исчерпана и oom стал убивать процессы

[Fri Feb 08 09:57:27 2013] [error] child died with signal 9
du: write error
du: write error
yuriy
VELIK505
Привет!
Я сейчас разгрузил мускул по полной, переделал роурет, улучшил кэширование роутера. Процентов на 30-40 упала нагрузка на проц. Но, теперь есть проблемы при архивации готовых страниц перед отправкой их в кэш. Когда ставлю архивацию на 2 (gzcompress), то сервер валится через 15-30 минут. Ставлю на 1, то держится в работе более-менее долго. Сутки может работать без проблем. Ещё есть подозрение на конфин апача. Постоянно растёт файл подкачки. Сдаётся, что есть утечка памяти, так как по конфигу апача процессы висят постоянно:

<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 75
MaxRequestsPerChild 0
</IfModule>

<IfModule mpm_worker_module>
StartServers 4
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxClients 75
MaxRequestsPerChild 0
</IfModule>

<IfModule mpm_event_module>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>

_____________
void x;
yuriy
I++
В 5 утра это я ребутил, после увеличения HDD. Ну понятно, что память сожрали. Не понятно кто сожрал и что нужно сделать, чтобы такого не было.

_____________
void x;
yuriy
Как я организовал мониторинг кэшей:


$current_size_cache_img = `du -s /var/www/kino/data/www/kino.ru/views/data/images/cache/`;
if (preg_match('#.*?(\d+).*#', $current_size_cache_img, $arrResult))
$current_size_cache_img = (int) $arrResult[1];
else
$current_size_cache_img = 0;

...


// Если $current_size_cache_img больше какой-то величины, то запускаю процедуру прореживания кэша картинок

class lib_TcleanCache extends gen_Tblk_ab {


/**
* public function perform()
*
*
@param Iregister $register
*
@param mixed $arrIn
*/

public function perform(Iregister $register = null, array $arrIn = array()) {

$dirCache = $arrIn[0];
$sizeDeleting = $arrIn[1];
if (empty($arrIn[2]))
return 0;
$currentSizeCache = $arrIn[2];
$nameFileMutex = $arrIn[3];
$timeLimit = $arrIn[4];

$nameProcess = '';
if (!empty($timeLimit))
$nameProcess = $register->getUniqueName(__CLASS__);

try {

if (is_dir($dirCache)) {
$dir = opendir($dirCache);
$countFiles = 0;
$sizeFiles = 0;
$sizeFile = 0;
$cycle = true;
while ((($file = readdir($dir)) !== false) && $cycle)
if (!preg_match('#^\..*#', $file)) {
$nameFile = $dirCache . $file;
if (is_file($nameFile)) {
if ($countFiles >= 99)
$cycle = false;
++
$countFiles;
$sizeFile = filesize($nameFile);
$sizeFiles += ($sizeFile / 1000);
}
}

closedir($dir);

$sizeFile = ($sizeFiles / $countFiles);
$countFiles = (int) ($currentSizeCache / $sizeFile);
$countFilesDeleting = (int) ($sizeDeleting / $sizeFile);
$interval = (int) ($countFiles / $countFilesDeleting);

$sizeFiles = 0;
$cycle = true;
$condition = false;
$oldSizeFiles = 0;
self::setLimitTimeProcess($nameProcess, $timeLimit);
self::startProcess($nameProcess);
while ($cycle && (!self::endRuntimeProcess($nameProcess))) {
$i = 0;
$dir = opendir($dirCache);
while ((($file = readdir($dir)) !== false) && $cycle && (!self::endRuntimeProcess($nameProcess)))
if (!preg_match('#^\..*#', $file)) {
$nameFile = $dirCache . $file;
if (is_file($nameFile)) {
$sizeFile = filesize($nameFile);
if (!$condition) {
if ($i == 0) {
$i = $interval;
$sizeFiles += ($sizeFile / 1000);
if (
file_exists($nameFile) &&
is_readable($nameFile) &&
is_writable($nameFile)
)

@unlink($nameFile);
if ($sizeFiles >= $sizeDeleting)
$cycle = false;
}
--$i;
}
else {
$sizeFiles += ($sizeFile / 1000);
if (
file_exists($nameFile) &&
is_readable($nameFile) &&
is_writable($nameFile)
)

@unlink($nameFile);
if ($sizeFiles >= $sizeDeleting)
$cycle = false;
}
}
}

$condition = true;
if ($sizeFiles == $oldSizeFiles)
$cycle = false;
else
$oldSizeFiles = $sizeFiles;
closedir($dir);
}
self::deleteProcess($nameProcess);
return $sizeFiles;
}
return 0;

}
catch (gen_Texception $exp) {
self::deleteProcess($nameProcess);
if (file_exists($nameFileMutex))
@unlink($nameFileMutex);
return 0;
}

}

}



_____________
void x;
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.