Home | History | Annotate | Download | only in library
      1 :mod:`resource` --- Resource usage information
      2 ==============================================
      3 
      4 .. module:: resource
      5    :platform: Unix
      6    :synopsis: An interface to provide resource usage information on the current process.
      7 
      8 .. moduleauthor:: Jeremy Hylton <jeremy (a] alum.mit.edu>
      9 .. sectionauthor:: Jeremy Hylton <jeremy (a] alum.mit.edu>
     10 
     11 --------------
     12 
     13 This module provides basic mechanisms for measuring and controlling system
     14 resources utilized by a program.
     15 
     16 Symbolic constants are used to specify particular system resources and to
     17 request usage information about either the current process or its children.
     18 
     19 An :exc:`OSError` is raised on syscall failure.
     20 
     21 
     22 .. exception:: error
     23 
     24    A deprecated alias of :exc:`OSError`.
     25 
     26    .. versionchanged:: 3.3
     27       Following :pep:`3151`, this class was made an alias of :exc:`OSError`.
     28 
     29 
     30 Resource Limits
     31 ---------------
     32 
     33 Resources usage can be limited using the :func:`setrlimit` function described
     34 below. Each resource is controlled by a pair of limits: a soft limit and a hard
     35 limit. The soft limit is the current limit, and may be lowered or raised by a
     36 process over time. The soft limit can never exceed the hard limit. The hard
     37 limit can be lowered to any value greater than the soft limit, but not raised.
     38 (Only processes with the effective UID of the super-user can raise a hard
     39 limit.)
     40 
     41 The specific resources that can be limited are system dependent. They are
     42 described in the :manpage:`getrlimit(2)` man page.  The resources listed below
     43 are supported when the underlying operating system supports them; resources
     44 which cannot be checked or controlled by the operating system are not defined in
     45 this module for those platforms.
     46 
     47 
     48 .. data:: RLIM_INFINITY
     49 
     50    Constant used to represent the limit for an unlimited resource.
     51 
     52 
     53 .. function:: getrlimit(resource)
     54 
     55    Returns a tuple ``(soft, hard)`` with the current soft and hard limits of
     56    *resource*. Raises :exc:`ValueError` if an invalid resource is specified, or
     57    :exc:`error` if the underlying system call fails unexpectedly.
     58 
     59 
     60 .. function:: setrlimit(resource, limits)
     61 
     62    Sets new limits of consumption of *resource*. The *limits* argument must be a
     63    tuple ``(soft, hard)`` of two integers describing the new limits. A value of
     64    :data:`~resource.RLIM_INFINITY` can be used to request a limit that is
     65    unlimited.
     66 
     67    Raises :exc:`ValueError` if an invalid resource is specified, if the new soft
     68    limit exceeds the hard limit, or if a process tries to raise its hard limit.
     69    Specifying a limit of :data:`~resource.RLIM_INFINITY` when the hard or
     70    system limit for that resource is not unlimited will result in a
     71    :exc:`ValueError`.  A process with the effective UID of super-user can
     72    request any valid limit value, including unlimited, but :exc:`ValueError`
     73    will still be raised if the requested limit exceeds the system imposed
     74    limit.
     75 
     76    ``setrlimit`` may also raise :exc:`error` if the underlying system call
     77    fails.
     78 
     79 .. function:: prlimit(pid, resource[, limits])
     80 
     81    Combines :func:`setrlimit` and :func:`getrlimit` in one function and
     82    supports to get and set the resources limits of an arbitrary process. If
     83    *pid* is 0, then the call applies to the current process. *resource* and
     84    *limits* have the same meaning as in :func:`setrlimit`, except that
     85    *limits* is optional.
     86 
     87    When *limits* is not given the function returns the *resource* limit of the
     88    process *pid*. When *limits* is given the *resource* limit of the process is
     89    set and the former resource limit is returned.
     90 
     91    Raises :exc:`ProcessLookupError` when *pid* can't be found and
     92    :exc:`PermissionError` when the user doesn't have ``CAP_SYS_RESOURCE`` for
     93    the process.
     94 
     95    .. availability:: Linux 2.6.36 or later with glibc 2.13 or later.
     96 
     97    .. versionadded:: 3.4
     98 
     99 
    100 These symbols define resources whose consumption can be controlled using the
    101 :func:`setrlimit` and :func:`getrlimit` functions described below. The values of
    102 these symbols are exactly the constants used by C programs.
    103 
    104 The Unix man page for :manpage:`getrlimit(2)` lists the available resources.
    105 Note that not all systems use the same symbol or same value to denote the same
    106 resource.  This module does not attempt to mask platform differences --- symbols
    107 not defined for a platform will not be available from this module on that
    108 platform.
    109 
    110 
    111 .. data:: RLIMIT_CORE
    112 
    113    The maximum size (in bytes) of a core file that the current process can create.
    114    This may result in the creation of a partial core file if a larger core would be
    115    required to contain the entire process image.
    116 
    117 
    118 .. data:: RLIMIT_CPU
    119 
    120    The maximum amount of processor time (in seconds) that a process can use. If
    121    this limit is exceeded, a :const:`SIGXCPU` signal is sent to the process. (See
    122    the :mod:`signal` module documentation for information about how to catch this
    123    signal and do something useful, e.g. flush open files to disk.)
    124 
    125 
    126 .. data:: RLIMIT_FSIZE
    127 
    128    The maximum size of a file which the process may create.
    129 
    130 
    131 .. data:: RLIMIT_DATA
    132 
    133    The maximum size (in bytes) of the process's heap.
    134 
    135 
    136 .. data:: RLIMIT_STACK
    137 
    138    The maximum size (in bytes) of the call stack for the current process.  This only
    139    affects the stack of the main thread in a multi-threaded process.
    140 
    141 
    142 .. data:: RLIMIT_RSS
    143 
    144    The maximum resident set size that should be made available to the process.
    145 
    146 
    147 .. data:: RLIMIT_NPROC
    148 
    149    The maximum number of processes the current process may create.
    150 
    151 
    152 .. data:: RLIMIT_NOFILE
    153 
    154    The maximum number of open file descriptors for the current process.
    155 
    156 
    157 .. data:: RLIMIT_OFILE
    158 
    159    The BSD name for :const:`RLIMIT_NOFILE`.
    160 
    161 
    162 .. data:: RLIMIT_MEMLOCK
    163 
    164    The maximum address space which may be locked in memory.
    165 
    166 
    167 .. data:: RLIMIT_VMEM
    168 
    169    The largest area of mapped memory which the process may occupy.
    170 
    171 
    172 .. data:: RLIMIT_AS
    173 
    174    The maximum area (in bytes) of address space which may be taken by the process.
    175 
    176 
    177 .. data:: RLIMIT_MSGQUEUE
    178 
    179    The number of bytes that can be allocated for POSIX message queues.
    180 
    181    .. availability:: Linux 2.6.8 or later.
    182 
    183    .. versionadded:: 3.4
    184 
    185 
    186 .. data:: RLIMIT_NICE
    187 
    188    The ceiling for the process's nice level (calculated as 20 - rlim_cur).
    189 
    190    .. availability:: Linux 2.6.12 or later.
    191 
    192    .. versionadded:: 3.4
    193 
    194 
    195 .. data:: RLIMIT_RTPRIO
    196 
    197    The ceiling of the real-time priority.
    198 
    199    .. availability:: Linux 2.6.12 or later.
    200 
    201    .. versionadded:: 3.4
    202 
    203 
    204 .. data:: RLIMIT_RTTIME
    205 
    206    The time limit (in microseconds) on CPU time that a process can spend
    207    under real-time scheduling without making a blocking syscall.
    208 
    209    .. availability:: Linux 2.6.25 or later.
    210 
    211    .. versionadded:: 3.4
    212 
    213 
    214 .. data:: RLIMIT_SIGPENDING
    215 
    216    The number of signals which the process may queue.
    217 
    218    .. availability:: Linux 2.6.8 or later.
    219 
    220    .. versionadded:: 3.4
    221 
    222 .. data:: RLIMIT_SBSIZE
    223 
    224    The maximum size (in bytes) of socket buffer usage for this user.
    225    This limits the amount of network memory, and hence the amount of mbufs,
    226    that this user may hold at any time.
    227 
    228    .. availability:: FreeBSD 9 or later.
    229 
    230    .. versionadded:: 3.4
    231 
    232 .. data:: RLIMIT_SWAP
    233 
    234    The maximum size (in bytes) of the swap space that may be reserved or
    235    used by all of this user id's processes.
    236    This limit is enforced only if bit 1 of the vm.overcommit sysctl is set.
    237    Please see :manpage:`tuning(7)` for a complete description of this sysctl.
    238 
    239    .. availability:: FreeBSD 9 or later.
    240 
    241    .. versionadded:: 3.4
    242 
    243 .. data:: RLIMIT_NPTS
    244 
    245    The maximum number of pseudo-terminals created by this user id.
    246 
    247    .. availability:: FreeBSD 9 or later.
    248 
    249    .. versionadded:: 3.4
    250 
    251 Resource Usage
    252 --------------
    253 
    254 These functions are used to retrieve resource usage information:
    255 
    256 
    257 .. function:: getrusage(who)
    258 
    259    This function returns an object that describes the resources consumed by either
    260    the current process or its children, as specified by the *who* parameter.  The
    261    *who* parameter should be specified using one of the :const:`RUSAGE_\*`
    262    constants described below.
    263 
    264    The fields of the return value each describe how a particular system resource
    265    has been used, e.g. amount of time spent running is user mode or number of times
    266    the process was swapped out of main memory. Some values are dependent on the
    267    clock tick internal, e.g. the amount of memory the process is using.
    268 
    269    For backward compatibility, the return value is also accessible as a tuple of 16
    270    elements.
    271 
    272    The fields :attr:`ru_utime` and :attr:`ru_stime` of the return value are
    273    floating point values representing the amount of time spent executing in user
    274    mode and the amount of time spent executing in system mode, respectively. The
    275    remaining values are integers. Consult the :manpage:`getrusage(2)` man page for
    276    detailed information about these values. A brief summary is presented here:
    277 
    278    +--------+---------------------+-------------------------------+
    279    | Index  | Field               | Resource                      |
    280    +========+=====================+===============================+
    281    | ``0``  | :attr:`ru_utime`    | time in user mode (float)     |
    282    +--------+---------------------+-------------------------------+
    283    | ``1``  | :attr:`ru_stime`    | time in system mode (float)   |
    284    +--------+---------------------+-------------------------------+
    285    | ``2``  | :attr:`ru_maxrss`   | maximum resident set size     |
    286    +--------+---------------------+-------------------------------+
    287    | ``3``  | :attr:`ru_ixrss`    | shared memory size            |
    288    +--------+---------------------+-------------------------------+
    289    | ``4``  | :attr:`ru_idrss`    | unshared memory size          |
    290    +--------+---------------------+-------------------------------+
    291    | ``5``  | :attr:`ru_isrss`    | unshared stack size           |
    292    +--------+---------------------+-------------------------------+
    293    | ``6``  | :attr:`ru_minflt`   | page faults not requiring I/O |
    294    +--------+---------------------+-------------------------------+
    295    | ``7``  | :attr:`ru_majflt`   | page faults requiring I/O     |
    296    +--------+---------------------+-------------------------------+
    297    | ``8``  | :attr:`ru_nswap`    | number of swap outs           |
    298    +--------+---------------------+-------------------------------+
    299    | ``9``  | :attr:`ru_inblock`  | block input operations        |
    300    +--------+---------------------+-------------------------------+
    301    | ``10`` | :attr:`ru_oublock`  | block output operations       |
    302    +--------+---------------------+-------------------------------+
    303    | ``11`` | :attr:`ru_msgsnd`   | messages sent                 |
    304    +--------+---------------------+-------------------------------+
    305    | ``12`` | :attr:`ru_msgrcv`   | messages received             |
    306    +--------+---------------------+-------------------------------+
    307    | ``13`` | :attr:`ru_nsignals` | signals received              |
    308    +--------+---------------------+-------------------------------+
    309    | ``14`` | :attr:`ru_nvcsw`    | voluntary context switches    |
    310    +--------+---------------------+-------------------------------+
    311    | ``15`` | :attr:`ru_nivcsw`   | involuntary context switches  |
    312    +--------+---------------------+-------------------------------+
    313 
    314    This function will raise a :exc:`ValueError` if an invalid *who* parameter is
    315    specified. It may also raise :exc:`error` exception in unusual circumstances.
    316 
    317 
    318 .. function:: getpagesize()
    319 
    320    Returns the number of bytes in a system page. (This need not be the same as the
    321    hardware page size.)
    322 
    323 The following :const:`RUSAGE_\*` symbols are passed to the :func:`getrusage`
    324 function to specify which processes information should be provided for.
    325 
    326 
    327 .. data:: RUSAGE_SELF
    328 
    329    Pass to :func:`getrusage` to request resources consumed by the calling
    330    process, which is the sum of resources used by all threads in the process.
    331 
    332 
    333 .. data:: RUSAGE_CHILDREN
    334 
    335    Pass to :func:`getrusage` to request resources consumed by child processes
    336    of the calling process which have been terminated and waited for.
    337 
    338 
    339 .. data:: RUSAGE_BOTH
    340 
    341    Pass to :func:`getrusage` to request resources consumed by both the current
    342    process and child processes.  May not be available on all systems.
    343 
    344 
    345 .. data:: RUSAGE_THREAD
    346 
    347    Pass to :func:`getrusage` to request resources consumed by the current
    348    thread.  May not be available on all systems.
    349 
    350    .. versionadded:: 3.2
    351