In most Linux Distributions core file creation is disabled by
default for a normal user. However, it can be necessary to enable this feature for an
application (e.g. Oracle). For example, if you encounter an
ORA-7445 error in Oracle, then it must be possible to write a core file for the user
«oracle».
To enable writing core files you use the ulimit command, it controls the resources available to a process
started by the shell, on systems that allow such control.
If you try to enable writing core files, usually you run in the
following problem. Normally SSH is used to logon to the server.
ssh oracle@ora-server
$ ulimit -a
core file
size (blocks, -c) 0
data seg
size (kbytes, -d)
unlimited
file
size
(blocks, -f) unlimited
pending
signals
(-i) 1024
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m)
unlimited
open
files
(-n) 65536
pipe size (512 bytes,
-p) 8
POSIX message queues (bytes, -q) 819200
stack size
(kbytes, -s) 10240
cpu
time
(seconds, -t) unlimited
max user
processes
(-u) 16384
virtual memory (kbytes, -v)
unlimited
file
locks
(-x) unlimited
Now, try (not as user root)
to change the core file size to unlimited
$ ulimit -c unlimited
-bash: ulimit: core file size: cannot modify limit: Operation not
permitted
- Check Environment for ulimit
The first step is to check, that you don't set ulimit -c
0 in any shell configuration files for this user, for example in $HOME/.bash_profile or $HOME/.bashrc. Uncomment it if you have such an entry.
#
# Do not produce core dumps
#
# ulimit -c 0
- Globally enable Core Dumps
This must be done as user root, usually in /etc/security/limits.conf
# /etc/security/limits.conf
#
# Each line describes a limit for a user in the form:
#
# <domain> <type> <item>
<value>
#
* soft core
unlimited
- Logoff and Logon again and set ulimit
ssh oracle@ora-server
$ ulimit -c
0
Try to set the limit as user root first
su -
ulimit -c unlimited
ulimit -c
unlimited
Now you can set ulimit also for user oracle
su - oracle
ulimit -c unlimited
ulimit -c
unlimited
Perhaps the last step number 3 is not necessary, but we have
figured out, that this is the way which always work. The core file size limitation is
usually also set in different configuration files. If you want to enable cores, you can
uncomment them.
In /etc/profile (Redhat)
# No core files by
default
# ulimit -S -c 0 > /dev/null 2>&1
In /etc/init.d/functions (Redhat)
# make sure it doesn't core
dump anywhere unless requested
# ulimit -S -c ${DAEMON_COREFILE_LIMIT:-0} >/dev/null 2>&1
Now, from this current shell you can generate the core, so check
ulimit before.
$ ulimit -a
core file
size (blocks, -c)
unlimited
data seg
size (kbytes, -d)
unlimited
file
size
(blocks, -f) unlimited
pending
signals
(-i) 1024
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m)
unlimited
open
files
(-n) 65536
pipe size (512 bytes,
-p) 8
POSIX message queues (bytes, -q) 819200
stack size
(kbytes, -s) 10240
cpu
time
(seconds, -t) unlimited
max user
processes
(-u) 16384
virtual memory (kbytes, -v)
unlimited
file
locks
(-x) unlimited