set limits for memory usage

Ladinig Rudolf r.ladinig at aon.at
Sun Apr 18 13:29:41 UTC 2004


Cameron Simpson schrieb:
> On 18:28 17 Apr 2004, Ladinig Rudolf <r.ladinig at aon.at> wrote:
> | Some days ago, when i visited Website www.hsecomputers.de and searched
> | at this website for a certain product (asante), the browser didn't load
> | for a long time and then all applications freezed. [...]
> | When I searched for the reasons for this, I found that the browser
> | (mozilla, firefox or netscape) was using more and more memory, until the
> | whole physical and swap memory was used by the browser. Then the OS was
> | unable to react to a user's input.
> | 
> | My question: I didn't find any possibility to limit the memory a single
> |  application or a single user can use. I'm sure, a multitasking and
> | multiuser OS has this capability.
> 
> You want the ulimit shell builtin command.
> 
> Example: to limit mozilla you might say:
> 
> 	(ulimit -d 100000; exec mozilla)
> 
> which would limit it to 100MB of data segment. Note that we put the
> ulimit in a subshell so as not to affect your main shell.
> 
> Also note that mozilla is a little special - the command you run is
> actually a wrapper script that only runs the real mozilla if you haven't
> got one up already. Otherwise it runs mozilla-xremote-client to tell the
> existing one to open a new window. So if mozilla is already up this won't
> work, because it will limit the mozilla-xremote-client, and not affect
> the active mozilla at all. You need to get in for the first invocation
> of mozilla for this.
> 
> "man sh" says:
> 
>        ulimit [-SHacdflmnpstuv [limit]]
>               Provides control over the resources available to the  shell  and
>               to  processes started by it, on systems that allow such control.
>               The -H and -S options specify that the hard or soft limit is set
>               for  the  given resource.  A hard limit cannot be increased once
>               it is set; a soft limit may be increased up to the value of  the
>               hard  limit.   If  neither -H nor -S is specified, both the soft
>               and hard limits are set.  The value of limit can be a number  in
>               the unit specified for the resource or one of the special values
>               hard, soft, or unlimited,  which  stand  for  the  current  hard
>               limit,  the  current soft limit, and no limit, respectively.  If
>               limit is omitted, the current value of the  soft  limit  of  the
>               resource  is  printed, unless the -H option is given.  When more
>               than one resource is specified, the  limit  name  and  unit  are
>               printed before the value.  Other options are interpreted as fol-
>               lows:
>               -a     All current limits are reported
>               -c     The maximum size of core files created
>               -d     The maximum size of a process's data segment
>               -f     The maximum size of files created by the shell
>               -l     The maximum size that may be locked into memory
>               -m     The maximum resident set size
>               -n     The maximum number of open file descriptors (most systems
>                      do not allow this value to be set)
>               -p     The pipe size in 512-byte blocks (this may not be set)
>               -s     The maximum stack size
>               -t     The maximum amount of cpu time in seconds
>               -u     The  maximum  number  of  processes available to a single
>                      user
>               -v     The maximum amount of virtual  memory  available  to  the
>                      shell
> 
>               If limit is given, it is the new value of the specified resource
>               (the -a option is display only).  If no option is given, then -f
>               is  assumed.  Values are in 1024-byte increments, except for -t,
>               which is in seconds, -p, which is in units of  512-byte  blocks,
>               and  -n and -u, which are unscaled values.  The return status is
>               0 unless an invalid option or argument is supplied, or an  error
>               occurs while setting a new limit.
> 
> Cheers,

Thanks for your answer,

I did the following:

[rladinig at boss rladinig]$ (ulimit -d 100000 ; exec 
/usr/local/netscape/netscape) &
[1] 5351
[rladinig at boss rladinig]$ top -b | grep netscape
  5357 rladinig  18   0 17036  15M 11028 S     0,0  6,2   0:00   0 
netscape-bin
  5357 rladinig  21   0 21432  19M 13156 R    14,7  7,9   0:01   0 
netscape-bin
  5357 rladinig  20   0 24904  23M 14488 S    14,5  9,3   0:02   0 
netscape-bin
  5357 rladinig  15   0 25540  23M 14892 S     6,7  9,6   0:02   0 
netscape-bin
  5357 rladinig  15   0 25576  23M 14900 S     6,9  9,6   0:02   0 
netscape-bin
  5357 rladinig  16   0 27836  26M 15216 R    11,7 10,5   0:03   0 
netscape-bin
  5357 rladinig  16   0 28668  27M 15632 S    22,5 10,8   0:04   0 
netscape-bin
  5357 rladinig  17   0 29244  27M 15680 S    18,5 11,0   0:05   0 
netscape-bin
  5357 rladinig  17   0 29692  28M 15800 S    21,3 11,2   0:06   0 
netscape-bin
  5357 rladinig  15   0 30440  28M 15800 S     9,9 11,5   0:07   0 
netscape-bin
  5357 rladinig  15   0 33088  31M 15812 S     9,5 12,5   0:07   0 
netscape-bin
  5357 rladinig  15   0 33780  31M 15812 S    11,3 12,8   0:08   0 
netscape-bin
  5357 rladinig  15   0 31256  29M 15812 S    12,1 11,8   0:08   0 
netscape-bin
  5357 rladinig  15   0 33380  31M 15812 S    14,5 12,6   0:09   0 
netscape-bin
  5357 rladinig  15   0 31992  30M 15816 S    16,9 12,1   0:10   0 
netscape-bin
  5357 rladinig  15   0 34956  33M 15816 S    18,7 13,2   0:11   0 
netscape-bin
  5357 rladinig  15   0 32848  31M 15816 S    17,3 12,4   0:12   0 
netscape-bin
  5357 rladinig  15   0  223M 158M 13884 D    16,1 63,6   0:14   0 
netscape-bin
  5357 rladinig  15   0  351M 187M 13380 D    16,6 75,3   0:15   0 
netscape-bin
  5357 rladinig  15   0  443M 199M  7060 D    14,7 79,8   0:16   0 
netscape-bin
  5357 rladinig  15   0  547M 189M  4248 D    18,3 76,1   0:17   0 
netscape-bin
  5357 rladinig  15   0  624M 195M  3424 D     9,1 78,3   0:18   0 
netscape-bin
  5357 rladinig  15   0  665M 223M   308 D     3,7 89,7   0:18   0 
netscape-bin
  5357 rladinig  15   0  667M 225M   132 D     0,9 90,4   0:18   0 
netscape-bin
  5357 rladinig  15   0  667M 225M   244 R     0,2 90,3   0:18   0 
netscape-bin
  5357 rladinig  15   0  667M 225M   260 D     0,0 90,3   0:18   0 
netscape-bin
  5357 rladinig  15   0  667M 224M   104 D     0,1 90,1   0:18   0 
netscape-bin
/usr/local/netscape/run-mozilla.sh: line 384:  5357 Getötet 
    $prog ${1+"$@"}


After 18 sec netscape has filled 90% of memory.

The script starts with pid 5351, netscape-bin with 5357. It looks like 
the limit is not working on netscape-bin.

RLadi





More information about the redhat-list mailing list