1998-08-11 03:42:37 +08:00
|
|
|
\section{\module{resource} ---
|
1999-03-03 00:37:17 +08:00
|
|
|
Resource usage information}
|
1998-07-24 01:59:49 +08:00
|
|
|
|
1999-03-03 00:37:17 +08:00
|
|
|
\declaremodule{builtin}{resource}
|
1999-03-03 01:03:42 +08:00
|
|
|
\platform{Unix}
|
1999-03-03 00:37:17 +08:00
|
|
|
\modulesynopsis{An interface to provide resource usage information on
|
|
|
|
the current process.}
|
2001-10-05 04:40:07 +08:00
|
|
|
\moduleauthor{Jeremy Hylton}{jeremy@alum.mit.edu}
|
|
|
|
\sectionauthor{Jeremy Hylton}{jeremy@alum.mit.edu}
|
1998-07-24 01:59:49 +08:00
|
|
|
|
1996-12-19 02:37:05 +08:00
|
|
|
|
|
|
|
This module provides basic mechanisms for measuring and controlling
|
|
|
|
system resources utilized by a program.
|
|
|
|
|
|
|
|
Symbolic constants are used to specify particular system resources and
|
|
|
|
to request usage information about either the current process or its
|
1997-12-06 15:25:41 +08:00
|
|
|
children.
|
1996-12-19 02:37:05 +08:00
|
|
|
|
1997-12-06 15:25:41 +08:00
|
|
|
A single exception is defined for errors:
|
|
|
|
|
|
|
|
|
|
|
|
\begin{excdesc}{error}
|
|
|
|
The functions described below may raise this error if the underlying
|
|
|
|
system call failures unexpectedly.
|
|
|
|
\end{excdesc}
|
|
|
|
|
|
|
|
\subsection{Resource Limits}
|
|
|
|
|
1998-03-11 14:18:15 +08:00
|
|
|
Resources usage can be limited using the \function{setrlimit()} function
|
1996-12-19 02:37:05 +08:00
|
|
|
described below. Each resource is controlled by a pair of limits: a
|
|
|
|
soft limit and a hard limit. The soft limit is the current limit, and
|
|
|
|
may be lowered or raised by a process over time. The soft limit can
|
|
|
|
never exceed the hard limit. The hard limit can be lowered to any
|
1997-12-06 15:25:41 +08:00
|
|
|
value greater than the soft limit, but not raised. (Only processes with
|
|
|
|
the effective UID of the super-user can raise a hard limit.)
|
1996-12-19 02:37:05 +08:00
|
|
|
|
|
|
|
The specific resources that can be limited are system dependent. They
|
1998-03-11 14:18:15 +08:00
|
|
|
are described in the \manpage{getrlimit}{2} man page. The resources
|
1997-12-06 15:25:41 +08:00
|
|
|
listed below are supported when the underlying operating system
|
|
|
|
supports them; resources which cannot be checked or controlled by the
|
|
|
|
operating system are not defined in this module for those platforms.
|
1996-12-19 02:37:05 +08:00
|
|
|
|
1997-12-06 15:25:41 +08:00
|
|
|
\begin{funcdesc}{getrlimit}{resource}
|
|
|
|
Returns a tuple \code{(\var{soft}, \var{hard})} with the current
|
1998-03-11 14:18:15 +08:00
|
|
|
soft and hard limits of \var{resource}. Raises \exception{ValueError} if
|
|
|
|
an invalid resource is specified, or \exception{error} if the
|
2005-01-01 08:28:46 +08:00
|
|
|
underlying system call fails unexpectedly.
|
1997-12-06 15:25:41 +08:00
|
|
|
\end{funcdesc}
|
1996-12-19 02:37:05 +08:00
|
|
|
|
1997-12-06 15:25:41 +08:00
|
|
|
\begin{funcdesc}{setrlimit}{resource, limits}
|
|
|
|
Sets new limits of consumption of \var{resource}. The \var{limits}
|
|
|
|
argument must be a tuple \code{(\var{soft}, \var{hard})} of two
|
|
|
|
integers describing the new limits. A value of \code{-1} can be used to
|
|
|
|
specify the maximum possible upper limit.
|
1996-12-19 02:37:05 +08:00
|
|
|
|
1998-03-11 14:18:15 +08:00
|
|
|
Raises \exception{ValueError} if an invalid resource is specified,
|
|
|
|
if the new soft limit exceeds the hard limit, or if a process tries
|
|
|
|
to raise its hard limit (unless the process has an effective UID of
|
2005-01-01 08:28:46 +08:00
|
|
|
super-user). Can also raise \exception{error} if the underlying
|
1998-03-11 14:18:15 +08:00
|
|
|
system call fails.
|
1997-12-06 15:25:41 +08:00
|
|
|
\end{funcdesc}
|
1996-12-19 02:37:05 +08:00
|
|
|
|
1997-12-06 15:25:41 +08:00
|
|
|
These symbols define resources whose consumption can be controlled
|
1998-03-11 14:18:15 +08:00
|
|
|
using the \function{setrlimit()} and \function{getrlimit()} functions
|
|
|
|
described below. The values of these symbols are exactly the constants
|
|
|
|
used by \C{} programs.
|
1996-12-19 02:37:05 +08:00
|
|
|
|
1998-03-11 14:18:15 +08:00
|
|
|
The \UNIX{} man page for \manpage{getrlimit}{2} lists the available
|
1997-12-06 15:25:41 +08:00
|
|
|
resources. Note that not all systems use the same symbol or same
|
2001-10-22 22:18:23 +08:00
|
|
|
value to denote the same resource. This module does not attempt to
|
|
|
|
mask platform differences --- symbols not defined for a platform will
|
|
|
|
not be available from this module on that platform.
|
1996-12-19 02:37:05 +08:00
|
|
|
|
1997-12-06 15:25:41 +08:00
|
|
|
\begin{datadesc}{RLIMIT_CORE}
|
|
|
|
The maximum size (in bytes) of a core file that the current process
|
|
|
|
can create. This may result in the creation of a partial core file
|
|
|
|
if a larger core would be required to contain the entire process
|
|
|
|
image.
|
1996-12-19 02:37:05 +08:00
|
|
|
\end{datadesc}
|
|
|
|
|
1997-12-06 15:25:41 +08:00
|
|
|
\begin{datadesc}{RLIMIT_CPU}
|
2001-07-14 10:50:55 +08:00
|
|
|
The maximum amount of processor time (in seconds) that a process can
|
1998-03-11 14:18:15 +08:00
|
|
|
use. If this limit is exceeded, a \constant{SIGXCPU} signal is sent to
|
1999-03-03 00:37:17 +08:00
|
|
|
the process. (See the \refmodule{signal} module documentation for
|
1997-12-06 15:25:41 +08:00
|
|
|
information about how to catch this signal and do something useful,
|
|
|
|
e.g. flush open files to disk.)
|
1996-12-19 02:37:05 +08:00
|
|
|
\end{datadesc}
|
|
|
|
|
1997-12-06 15:25:41 +08:00
|
|
|
\begin{datadesc}{RLIMIT_FSIZE}
|
|
|
|
The maximum size of a file which the process may create. This only
|
|
|
|
affects the stack of the main thread in a multi-threaded process.
|
|
|
|
\end{datadesc}
|
|
|
|
|
|
|
|
\begin{datadesc}{RLIMIT_DATA}
|
|
|
|
The maximum size (in bytes) of the process's heap.
|
|
|
|
\end{datadesc}
|
|
|
|
|
|
|
|
\begin{datadesc}{RLIMIT_STACK}
|
|
|
|
The maximum size (in bytes) of the call stack for the current
|
|
|
|
process.
|
|
|
|
\end{datadesc}
|
|
|
|
|
|
|
|
\begin{datadesc}{RLIMIT_RSS}
|
|
|
|
The maximum resident set size that should be made available to the
|
|
|
|
process.
|
|
|
|
\end{datadesc}
|
|
|
|
|
|
|
|
\begin{datadesc}{RLIMIT_NPROC}
|
|
|
|
The maximum number of processes the current process may create.
|
1996-12-19 02:37:05 +08:00
|
|
|
\end{datadesc}
|
|
|
|
|
1997-12-06 15:25:41 +08:00
|
|
|
\begin{datadesc}{RLIMIT_NOFILE}
|
|
|
|
The maximum number of open file descriptors for the current
|
|
|
|
process.
|
|
|
|
\end{datadesc}
|
|
|
|
|
|
|
|
\begin{datadesc}{RLIMIT_OFILE}
|
1998-03-11 14:18:15 +08:00
|
|
|
The BSD name for \constant{RLIMIT_NOFILE}.
|
1997-12-06 15:25:41 +08:00
|
|
|
\end{datadesc}
|
|
|
|
|
2003-07-13 08:46:40 +08:00
|
|
|
\begin{datadesc}{RLIMIT_MEMLOCK}
|
|
|
|
The maximum address space which may be locked in memory.
|
1997-12-06 15:25:41 +08:00
|
|
|
\end{datadesc}
|
|
|
|
|
|
|
|
\begin{datadesc}{RLIMIT_VMEM}
|
|
|
|
The largest area of mapped memory which the process may occupy.
|
|
|
|
\end{datadesc}
|
|
|
|
|
|
|
|
\begin{datadesc}{RLIMIT_AS}
|
|
|
|
The maximum area (in bytes) of address space which may be taken by
|
|
|
|
the process.
|
|
|
|
\end{datadesc}
|
|
|
|
|
|
|
|
\subsection{Resource Usage}
|
|
|
|
|
2002-04-09 05:28:20 +08:00
|
|
|
These functions are used to retrieve resource usage information:
|
1996-12-19 02:37:05 +08:00
|
|
|
|
|
|
|
\begin{funcdesc}{getrusage}{who}
|
2002-04-09 05:28:20 +08:00
|
|
|
This function returns an object that describes the resources
|
1996-12-19 02:37:05 +08:00
|
|
|
consumed by either the current process or its children, as specified
|
1997-12-06 15:25:41 +08:00
|
|
|
by the \var{who} parameter. The \var{who} parameter should be
|
1999-03-03 00:37:17 +08:00
|
|
|
specified using one of the \constant{RUSAGE_*} constants described
|
1997-12-06 15:25:41 +08:00
|
|
|
below.
|
|
|
|
|
2002-04-09 05:28:20 +08:00
|
|
|
The fields of the return value each describe how a particular system
|
|
|
|
resource has been used, e.g. amount of time spent running is user mode
|
|
|
|
or number of times the process was swapped out of main memory. Some
|
|
|
|
values are dependent on the clock tick internal, e.g. the amount of
|
|
|
|
memory the process is using.
|
|
|
|
|
|
|
|
For backward compatibility, the return value is also accessible as
|
|
|
|
a tuple of 16 elements.
|
|
|
|
|
|
|
|
The fields \member{ru_utime} and \member{ru_stime} of the return value
|
|
|
|
are floating point values representing the amount of time spent
|
|
|
|
executing in user mode and the amount of time spent executing in system
|
|
|
|
mode, respectively. The remaining values are integers. Consult the
|
|
|
|
\manpage{getrusage}{2} man page for detailed information about these
|
|
|
|
values. A brief summary is presented here:
|
|
|
|
|
|
|
|
\begin{tableiii}{r|l|l}{code}{Index}{Field}{Resource}
|
|
|
|
\lineiii{0}{\member{ru_utime}}{time in user mode (float)}
|
|
|
|
\lineiii{1}{\member{ru_stime}}{time in system mode (float)}
|
|
|
|
\lineiii{2}{\member{ru_maxrss}}{maximum resident set size}
|
|
|
|
\lineiii{3}{\member{ru_ixrss}}{shared memory size}
|
|
|
|
\lineiii{4}{\member{ru_idrss}}{unshared memory size}
|
|
|
|
\lineiii{5}{\member{ru_isrss}}{unshared stack size}
|
|
|
|
\lineiii{6}{\member{ru_minflt}}{page faults not requiring I/O}
|
|
|
|
\lineiii{7}{\member{ru_majflt}}{page faults requiring I/O}
|
|
|
|
\lineiii{8}{\member{ru_nswap}}{number of swap outs}
|
|
|
|
\lineiii{9}{\member{ru_inblock}}{block input operations}
|
|
|
|
\lineiii{10}{\member{ru_oublock}}{block output operations}
|
|
|
|
\lineiii{11}{\member{ru_msgsnd}}{messages sent}
|
|
|
|
\lineiii{12}{\member{ru_msgrcv}}{messages received}
|
|
|
|
\lineiii{13}{\member{ru_nsignals}}{signals received}
|
|
|
|
\lineiii{14}{\member{ru_nvcsw}}{voluntary context switches}
|
|
|
|
\lineiii{15}{\member{ru_nivcsw}}{involuntary context switches}
|
|
|
|
\end{tableiii}
|
1996-12-19 02:37:05 +08:00
|
|
|
|
1998-03-11 14:18:15 +08:00
|
|
|
This function will raise a \exception{ValueError} if an invalid
|
|
|
|
\var{who} parameter is specified. It may also raise
|
|
|
|
\exception{error} exception in unusual circumstances.
|
2002-04-09 05:28:20 +08:00
|
|
|
|
|
|
|
\versionchanged[Added access to values as attributes of the
|
|
|
|
returned object]{2.3}
|
1996-12-19 02:37:05 +08:00
|
|
|
\end{funcdesc}
|
|
|
|
|
|
|
|
\begin{funcdesc}{getpagesize}{}
|
|
|
|
Returns the number of bytes in a system page. (This need not be the
|
|
|
|
same as the hardware page size.) This function is useful for
|
|
|
|
determining the number of bytes of memory a process is using. The
|
1998-03-11 14:18:15 +08:00
|
|
|
third element of the tuple returned by \function{getrusage()} describes
|
1996-12-19 02:37:05 +08:00
|
|
|
memory usage in pages; multiplying by page size produces number of
|
|
|
|
bytes.
|
|
|
|
\end{funcdesc}
|
|
|
|
|
1999-03-03 00:37:17 +08:00
|
|
|
The following \constant{RUSAGE_*} symbols are passed to the
|
1998-03-11 14:18:15 +08:00
|
|
|
\function{getrusage()} function to specify which processes information
|
1997-12-06 15:25:41 +08:00
|
|
|
should be provided for.
|
1996-12-19 02:37:05 +08:00
|
|
|
|
1997-12-06 15:25:41 +08:00
|
|
|
\begin{datadesc}{RUSAGE_SELF}
|
1998-03-11 14:18:15 +08:00
|
|
|
\constant{RUSAGE_SELF} should be used to
|
1997-12-06 15:25:41 +08:00
|
|
|
request information pertaining only to the process itself.
|
|
|
|
\end{datadesc}
|
1996-12-19 02:37:05 +08:00
|
|
|
|
1997-12-06 15:25:41 +08:00
|
|
|
\begin{datadesc}{RUSAGE_CHILDREN}
|
1998-03-11 14:18:15 +08:00
|
|
|
Pass to \function{getrusage()} to request resource information for
|
|
|
|
child processes of the calling process.
|
1997-12-06 15:25:41 +08:00
|
|
|
\end{datadesc}
|
|
|
|
|
|
|
|
\begin{datadesc}{RUSAGE_BOTH}
|
1998-03-11 14:18:15 +08:00
|
|
|
Pass to \function{getrusage()} to request resources consumed by both
|
|
|
|
the current process and child processes. May not be available on all
|
1997-12-06 15:25:41 +08:00
|
|
|
systems.
|
|
|
|
\end{datadesc}
|