]]>
]]>
Рейтинг@Mail.ru

Оптимизация записи в файл

Материал из Веб программирование.

Перейти к: навигация, поиск

Пойдет речь о flock!

О Причине по которым серверы падают из-за частых запросов на один и тот же файл

Существует несколько причин, почему каждому разработчику программного обеспечения следует избегать использования блокировки файлов flock, если это возможно. Мой собственный сервер падал несколько раз из-за flock (в том числе несколько часов простоя). Поэтому вы должны подумать дважды, прежде чем вы решите использовать flock.

Через некоторое время я обнаружил проблему. По моему наблюдению, это было не плохо написаны PHP скрипты, а от части непонятные ошибки в FreeBSD. В некоторых случаях, когда более 20 запросов в секунду пытаются сделать flock на тот же файл, PHP скрипт зависал :), и загрузка процессора (CPU) сервера подлитала на 100% (только перезагрузка Apache или ручной kill процессов мог помочь).

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

// Ждем пока файл будет заблокирован flock для записи fwrite (1000 миллисекунд таймаут) 
if ($fp = fopen($fileName, 'a')) { 
  $startTime = microtime(); 
  do { 
    $canWrite = flock($fp, LOCK_EX); 
    // Если не можем поставить блокировку flock то ждем 0 - 100 миллисекунд, ждем чтобы избежать загрузку процесса 
    if(!$canWrite) usleep(round(rand(0, 100)*1000)); 
  } while ((!$canWrite)and((microtime()-$startTime) < 1000)); 
 
  //Файл заблокирован flock, теперь мы можем сделать запись
  if ($canWrite) { 
    fwrite($fp, $dataToSave); 
  } 
  fclose($fp);                                  
}

Я добавил простое значение таймаут для flock. Если блокировка flock не была получена в течение нескольких секунд, то запись будет пропущена, вместо того чтобы ждать и приводит сервер к большой загрузки процессора.

]]>
Google+
]]>
Личные инструменты
Хочешь еще цитату? xxx: Солдатам, пока горит спичка, надо раздеться и лечь, а с утра, пока горит спичка, одеться и заправить кровать.
xxx: У IT-шников, пока вырубается комп, раздеться и лечь, а пока он врубается, одеться и сесть за комп) в одном из чатов
веб-программирование
Просмотры
чтим

Deprecated: Function set_magic_quotes_runtime() is deprecated in /var/www/webproger/data/www/webproger.ru/1c6a72389c0fd92079ac7ae7cd356173/sape.php on line 218 Deprecated: Function set_magic_quotes_runtime() is deprecated in /var/www/webproger/data/www/webproger.ru/1c6a72389c0fd92079ac7ae7cd356173/sape.php on line 224

]]>
Rambler's Top100
]]>
]]>
]]>