Re: Questions regarding limits of processes launched by system, exec,passthru ...

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]



Hello all again,

It seems that Problem can only be solved by one of the following ways:

1. Don't use mod_php; use CGI or FastCGI instead. Then it would be
   possible to limit the resources via RLimitCPU / RLimitMEM.

2. Use one of the following apache core patch
    http://archives.neohapsis.com/archives/openbsd/2005-12/1436.html
   or the following apache module:
    http://www.ucc.asn.au/~dagobah/things/mod_rlimit.c
   (Unfortunately only for apache 1.3)

Thanks for all your answers.

Kind regards
valli

Hello all,

Is there a way to limit the memory consumption and / or the CPU
consumption of processes launched by the php functions system,
exec, passthru, proc_open and shell_exec?

We use mod_php with an apache (mpm-prefork) on Linux.

The following settings don't have any effect at all:
PHP:
  max_execution_time 30
  memory_limit 8M
Apache:
  RLimitCPU 30 30
  RLimitMEM 8388608 8388608

The limits above do have effect on php-scripts (without system calls)
and on CGIs (as well on processes launched by CGIs).

Any Ideas?

Kind Regards
valli


PS: I tested it with the following two scripts:
system_memorytest.php
=====================
<html>
<head>
  <title>php-systemcall-memory test</title>
</head>
<body>
  php-systemcall-memory test<br>
  ... and here's the system call:<br>
  <pre>
<?php
   $cmd = '/usr/bin/perl -e \'
      $| = 1;
      print "start of the systemcall<br>\n";
      $s = "teststr_";
      while (1) {
         print "len=".length($s)."<br>\n";
         sleep(1);
         $s .= $s;
      }
   \'';
   print htmlspecialchars($cmd);
?>
  </pre>
<?php
  ob_flush();
  flush();
  system($cmd);
?>
</body>
</html>


system_timeouttest.php
======================
<html>
<head>
  <title>php-systemcall-timeout test</title>
</head>
<body>
  php-systemcall-timeout test<br>
  ... and here's the system call:<br>
  <pre>
<?php
   $cmd = '/usr/bin/perl -e \'
      $| = 1;
      print "start of the systemcall<br>\n";
      $i = 0;
      while (1) {
         if (($i % 10000000) == 0) {
            print "i=".$i."<br>\n";
         }
         $i += 1;
      }
   \'';
   print htmlspecialchars($cmd);
?>
  </pre>
<?php
  ob_flush();
  flush();
  system($cmd);
?>
</body>
</html>

[Index of Archives]     [PHP Users]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [Postgresql]     [PHP Books]     [PHP Databases]     [PHP SOAP]
  Powered by Linux