Течь Апачи с ПХП

Mammoth

Guest
Если честно, я не сталкивался с этим ни под Линуксом, ни под Вынью.
Может быть проблема может быть решена уменьшением значения MaxRequestsPerChild (количества обработанных запросов, до того как потомок обновится).
 

si

Administrator
Если честно, я не сталкивался с этим ни под Линуксом, ни под Вынью.
Может быть проблема может быть решена уменьшением значения MaxRequestsPerChild (количества обработанных запросов, до того как потомок обновится).
Вы вообще читаете что другие пишут ?
 

Barlone

Guest
Автор оригинала: 440hz
5. и последнее ... если запустить 10 раз 2 скрипт память вырастет на 200 метров. улавливаете ?
Это точно? Проверено? (Всё предидущее вполне нормально)
 

440hz

Guest
Автор оригинала: Barlone
Это точно? Проверено? (Всё предидущее вполне нормально)
оставлял ОДНОГО потомка апрача и запускал скрипт. все так и есть ... растет гад
 

440hz

Guest
Автор оригинала: Mammoth
Да.

440hz:
Может поможет установка значения MaxSpareServers...
дело не в том как ограничить верх памяти апачу, а в том где течть. вот !
 

Mammoth

Guest
дело не в том как ограничить верх памяти апачу, а в том где течть. вот !
Так я и не предлагаю ограничивать кол-во памяти апача. Эта директива всего лишь убивает потомков, не занятых обработкой запросов (при превышении указываемого кол-ва).
 

AnToXa

prodigy-одаренный ребенок
1. хммм... а скрипт в студию мона?
у меня такое ощущение, что это из-за FreeBSD 4.6-RC

2. Mammoth ? вы читаете что другие пишут?

3. 440hz попробуйте посмотреть апач через ktrace или gdb.
4. напишите в support

5. первый пункт плиз :)
 

bsv

Guest
У меня под Виндой такое постоянно, спасает только то, что посетителей не много, и ночью перезапуск (по другим соображениям).

MaxRequestsPerChild 1

чайлды закрываются нормально, но вот "родительский" процес нехило разрастается. Вот сейчас:
Парент занимает 33 мб
А единственный чайлд, который нифига не делает, свои законные 5 мб
 

440hz

Guest
Автор оригинала: AnToXa
1. хммм... а скрипт в студию мона?
у меня такое ощущение, что это из-за FreeBSD 4.6-RC
5. первый пункт плиз :)
ну такое дело:

скрипт <B>гарантировано отжирает 20М</B> и память остается не освобожденной, т.е. апач крутиться дальне, но память занята ...

куски скрипта я вырезал

размер файла, который считывается 4-5 метров. Это лог ...

если парсить лог сразу, не через массив - память не течет.


PHP:
<?php

$NOW = time();

if(@file_exists("/data/new/debug/".date("Y.m.d",$NOW).".txt")) {

	$fd = fopen("/data/new/debug/".date("Y.m.d",$NOW).".txt","r");
	$buffer = "";
	while (!feof ($fd)) {
		$buffer = fgets($fd, 4096);
		if($buffer <> "") {

			$LOGS[] = $buffer;

		}
	}
	unset($buffer);
	fclose ($fd);

	OOPSHTTPSend("<table width=100% cellspacing=1 cellpadding=5 border=0 bgcolor=".$OOPSGlobal["BASE_COLOR_2"].">");

	reset($LOGS);
	while(list($n,$v) = each($LOGS)) {

		$LOG = explode("\t",$v);

		$TIME = $LOG[0];
		$IP   = $LOG[1];
		$REF  = $LOG[2];
		$SES  = $LOG[3];
		$WHO  = $LOG[4];
		$CNT  = $LOG[5];
		$PAG  = $LOG[6];
		$DATA = $LOG[7];

		if($PAG == "SEARCH") {
			$STR = substr($DATA,4);
			if(!empty($STR)) {
				if(empty($QSQ[$STR]))
					$QSQ[$STR] = 1;
				else
					$QSQ[$STR]++;
			}
		}
	}

	asort($QSQ);
	$QSQ = array_reverse($QSQ,true);
	reset($QSQ);
	while(list($r,$c) = each($QSQ)) {

	   ...
	
	}


	unset($LOGS);


}



?>
 

.des.

Поставил пиво кому надо ;-)
Пара замечаний, может они и не существенны но все же попробуй.
1. все равно ты читаешь весь файл - читай его при помощи file()
2. далее
PHP:
while(list($n,$v) = each($LOGS))
{ 
        $LOG = explode("\t",$v);
...
Здесь все-таки надо не плодить копии а обращаться к элементам массива по ссылке.
 

440hz

Guest
Автор оригинала: AnToXa
весь верх надо заменить на [m]file[/m]


это как?
делал. так с начала и было. :) что мы, хуже всех, что ли хе-хе

просто у меня ощущение, что при наборе определенной границы массива где-то что-то рушится у связки пхп+апач. :(
 

440hz

Guest
Автор оригинала: .des.
Пара замечаний, может они и не существенны но все же попробуй.
1. все равно ты читаешь весь файл - читай его при помощи file()
2. далее
PHP:
while(list($n,$v) = each($LOGS))
{ 
        $LOG = explode("\t",$v);
...
Здесь все-таки надо не плодить копии а обращаться к элементам массива по ссылке.
менял - не меняет сути проблемы.
 

.des.

Поставил пиво кому надо ;-)
440hz все таки приведи пример когда память не течет?
 

440hz

Guest
Автор оригинала: .des.
440hz все таки приведи пример когда память не течет?
не течет, например, когда прописать

unset($GLOBALS); // если понятно что это делает

в конце скрипта, но это же не нормальная работа. пхп сам должен это делать, а не я ручками. мне, конечно, не трудно. :) но всетаки ...
 

440hz

Guest
Автор оригинала: .des.
440hz все таки приведи пример когда память не течет?
еще вот так:

сделать вызов скрипта несколько раз (5-7) по клавише F5 из IE. т.е. "поднапрячь" апач.

гарантировано вырастает на 20М несколько копий апач итак и крутятся дальше ... не освобождая память
 

440hz

Guest
Автор оригинала: .des.
440hz все таки приведи пример когда память не течет?
не течет вот так:

PHP:
$fd = fopen("/data/new/debug/".date("Y.m.d",$NOW).".txt","r");
	$buffer = "";
	$QSQ = array();
	while (!feof ($fd)) {
		$buffer = fgets($fd, 4096);
		if($buffer <> "") {
			$LOG = explode("\t",$buffer);

			$TIME = $LOG[0];
			$IP   = $LOG[1];
			$REF  = $LOG[2];
			$SES  = $LOG[3];
			$WHO  = $LOG[4];
			$CNT  = $LOG[5];
			$PAG  = $LOG[6];
			$DATA = $LOG[7];

			if($PAG == "SEARCH") {
				$STR = substr($DATA,4);
				if(!empty($STR)) {
					if(empty($QSQ[$STR]))
						$QSQ[$STR] = 1;
					else
						$QSQ[$STR]++;
				}
			}
		}
	}
	unset($buffer);
	fclose ($fd);
 

AnToXa

prodigy-одаренный ребенок
хммм... а если увеличить размер файла при таком раскладе?
 
Сверху