PHP Fatal error: Allowed memory size of 134217728 bytes exhausted


 
Thread Tools Search this Thread
Top Forums Web Development PHP Fatal error: Allowed memory size of 134217728 bytes exhausted
# 1  
Old 01-26-2010
[solved] PHP Fatal error: Allowed memory size of 134217728 bytes exhausted

Any clues on how to get rid of this PHP error?

Code:
[26-Jan-2010 00:53:22] PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 71 bytes) in /website/www/includes/functions_manpages.php on line 58
[26-Jan-2010 01:38:37] PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 71 bytes) in /website/www/includes/functions_manpages.php on line 58
[26-Jan-2010 04:33:40] PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 71 bytes) in /website/www/includes/functions_manpages.php on line 58
[26-Jan-2010 05:33:16] PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 71 bytes) in /website/www/includes/functions_manpages.php on line 58
[26-Jan-2010 07:36:43] PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 71 bytes) in /website/www/includes/functions_manpages.php on line 58
[26-Jan-2010 10:32:52] PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 71 bytes) in /website/www/includes/functions_manpages.php on line 58

Offending code fragment below:

PHP Code:
foreach ( $matchWords as $key=>$item ) {
          if ( 
$item == '' || in_array(strtolower($item), $stopWords) || strlen($item) <= ) {
              unset(
$matchWords[$key]);  //offending line 58
            
}
          if ( 
preg_match('/^[ \t]+/',$item) ) {
              unset(
$matchWords[$key]);
            }
          } 


---------- Post updated at 20:41 ---------- Previous update was at 15:26 ----------

I think I fixed this......

The problem seemed to be short queries (one letter, for example) in apropos (all sections) generating too large of search results.

Basically, I have limited the queries, something like this:

PHP Code:
if (!preg_match("/^\w[\w\-]+$/",$query) && !preg_match("/^\w\w+\.\w+$/",$query) && !preg_match("/^\w\w+::\w+$/",$query)) {
        
notfound();
        
$showresults=0;
    } 
Surely there is a cleaner, better, nicer way... but I'll leave that for another day Smilie
# 2  
Old 01-26-2010
The heap size is in the php.ini if you want to increase it.

It's pretty common to need to bump it up a bit higher for some applications.
# 3  
Old 01-26-2010
Thanks.

I think we are OK as long as we disallow single letter apropos queries, etc.

In addition, I have made a few other changes so people cannot search with hacker strings like ../.. etc. etc.

.... a kind of "Explicit Allow" for query strings to the man command to try to minimize hacker play on the man page search engine.

Still need more work.

OBTW, we are already starting to see a number of Google search referrals to our new man pages, and we rank pretty high for such a short time in the playing field.
# 4  
Old 02-05-2010
I have not been able to trap every possible odd query that can cause this error without causing a redirect problem (and am a bit lazy to keep trying ...) so I am trying this in the offending PHP function:

Code:
ini_set( "memory_limit","192M");

Was

Code:
ini_set( "memory_limit","128M");

# 5  
Old 11-02-2010
OK, finally, 8 months after posting this php memory bug, I figured it out, hahaha.

Basically, I used the PHP error_log() function to print the memory allocation using memory_get_usage() and discovered that an array was using a lot of memory, and traced it to $string (using strlen($string) in the debug log) that was passed to the function used in a regex to create the array.

As a temporary fix, I created a PHP conditional to test the memory usage and avoid the offending foreach statement until I could come up with a solution (debugging the entire process, step-by-step).

The solution was to simply define MAX_STR and take a sub string of the huge $string with substr($string,0,MAX_STR), which was using all the memory in the foreach loop in the function.


Then, to clean up, I defined MAX_MEM to insure that the maximum memory of this PHP thread would alway be less than the max PHP memory allocated in the php.ini file.

PHP Code:
define('MAX_STR',512000);
define('MAX_MEM',96000000);
$string substr($string,0,MAX_STR);
if(
memory_get_usage() < MAX_MEM){//blah blah} 
Housekeeping work... done!
Login or Register to Ask a Question

Previous Thread | Next Thread

7 More Discussions You Might Find Interesting

1. What is on Your Mind?

PHP Fatal Errors During SSL Cert Management - PHP Fatal error: xc_fcntl_mutex failed

Today, I noticed some errors in our SSL cert renewal log files, mostly related to domains where the IP address had changed. Concerned about this, rebuilt out SSL cert, which normally goes well without a hiccup. However, for today, for some reason which I cannot explain, there was a PHP error... (0 Replies)
Discussion started by: Neo
0 Replies

2. Shell Programming and Scripting

Error PHP Fatal error: Allowed memory size of 67108864 bytes exhausted(tried to allocate 401 bytes)

While running script I am getting an error like Few lines in data are not being processed. After googling it I came to know that adding such line would give some memory to it ini_set("memory_limit","64M"); my input file size is 1 GB. Is that memory limit is based on RAM we have on... (1 Reply)
Discussion started by: elamurugu
1 Replies

3. UNIX for Advanced & Expert Users

Out of Memory error when free memory size is large

I was running a program and it stopped and showed "Out of Memory!". at that time, the RAM used by this process is around 4G and the free memory size of the machine is around 30G. Does anybody know what maybe the reason? this program is written with Perl. the OS of the machine is Solaris U8. And I... (1 Reply)
Discussion started by: lilili07
1 Replies

4. Solaris

PHP 5.3 compile on Solaris 10 : make distclean :: fatal error

I'm trying to install PHP 5.3 on Solaris 10 . I'm using etc/apache2 and installed mysql 5.1.39. When I tried to compile PHP 5.3, with the following configure text, ./configure --with-mysql=/usr/local/mysql \ --with-mysqli=/usr/local/mysql/bin/mysql_config --with-zlib-dir=/usr/local \... (21 Replies)
Discussion started by: ppa108
21 Replies

5. Shell Programming and Scripting

Compare lines in two files (Memory getting exhausted)

Hi, Could someone please help me with the best approach to compare lines from one file to another? Here is how I have entries - File 1 a1 a2 a3 a4 a9 a10 a15 File2 a5 a6 a15 (5 Replies)
Discussion started by: sncoupons
5 Replies

6. Shell Programming and Scripting

Memory exhausted in awk

Dear All, I have executed a awk script in linux box which consists of 21 Million records.And i have two mapping files of 500 and 5200 records.To my surprise i found an error awk: cmd. line:19: (FILENAME=/home/FILE FNR=21031272) fatal: Memory exhausted. Is there any limitation for records... (3 Replies)
Discussion started by: cskumar
3 Replies

7. AIX

How to increase memory size allowed to one process

Hi, I have migrated some processing from true64 --> AIX 5.3. my problem is to process large files in memory by diff or awk program. I need to load app. 1.3 GB of data into memory but it fails that there is not enough memory. I need following: diff file1 file2 orig. aix diff err... (2 Replies)
Discussion started by: Petr
2 Replies
Login or Register to Ask a Question