O/H Thodoris έγραψε:

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>





Well as far as I know there are already memory limits to every php process and you define this in php.ini. I recently made a script that used to exhaust all the given memory and I needed to increase the limit.

memory_limit = 16M

You can change this to whatever you wish to control. You can also change these if you want to control execution time:

max_execution_time = 30 ; Maximum execution time of each script, in seconds max_input_time = 60 ; Maximum amount of time each script may spend parsing request data


I haven't seen a way to control disk access space but I guess there are two ways to do that. One is quota the space that php writes in or do this by the programming way (meaning that you may check the space before you write something).

As for the CPU I think there are OS specific techniques to control resource usage in general but it depends on what *nix system you use (FreeBSD, Linux etc).


------------
Thodoris


Sorry for the mistake I misread the original question.

The fact is that if I am correct when you call something using system a different process is handling this so you can do this only using the OS. In this case php.ini has no effect.

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to