First of all you want to determine what file(s) remain open. I’m assuming your server runs linux, so once you know JBoss’es PID
ps ax | grep something-that-makes-your-jboss-process-unique
you can do
ls -l /proc/jbosspid/fd
to get a nice list of files that are open at that instant.
What you’re going to do next depends a bit on what you see here:
- you may just need to up the number of files the server can open a bit with ulimit (also look at systemwide limits on your server)
- maybe you spot a number of files your application forgot to close
- ….
Also the max limit is high
linux-server:~# cat /proc/sys/fs/file-max
202989
and the max ever occupied is well below the limit:
cat /proc/sys/fs/file-nr
6304 0 202989
all users return the same limit (including the jboss user who initiates the app server):
jboss@linux-server:/home$ ulimit -n
A wat to have a look at this is to run the lsof command (only as root) – it will show you all the open file descriptors.
In order to fix that, edit the file in /etc/security/limits.conf and add the following lines and restart your jboss.
jboss soft nofile 16384
jboss hard nofile 16384
(assuming your jboss is run by the “jboss” user)
- Settings in
/etc/security/limits.conf
take the following form:# vi /etc/security/limits.conf #<domain> <type> <item> <value> * - core <value> * - data <value> * - priority <value> * - fsize <value> * soft sigpending <value> eg:57344 * hard sigpending <value> eg:57444 * - memlock <value> * - nofile <value> eg:1024 * - msgqueue <value> eg:819200 * - locks <value> * soft core <value> * hard nofile <value> @<group> hard nproc <value> <user> soft nproc <value> %<group> hard nproc <value> <user> hard nproc <value> @<group> - maxlogins <value> <user> hard cpu <value> <user> soft cpu <value> <user> hard locks <value>
<domain>
can be:- an user name
- a group name, with @group syntax
- the wildcard *, for default entry
- the wildcard %, can be also used with %group syntax, for maxlogin limit
<type>
can have the two values:- “soft” for enforcing the soft limits
- “hard” for enforcing hard limits
<item>
can be one of the following:- core – limits the core file size (KB)
- data – max data size (KB)
- fsize – maximum filesize (KB)
- memlock – max locked-in-memory address space (KB)
- nofile – max number of open files
- rss – max resident set size (KB)
- stack – max stack size (KB)
- cpu – max CPU time (MIN)
- nproc – max number of processes
- as – address space limit (KB)
- maxlogins – max number of logins for this user
- maxsyslogins – max number of logins on the system
- priority – the priority to run user process with
- locks – max number of file locks the user can hold
- sigpending – max number of pending signals
- msgqueue – max memory used by POSIX message queues (bytes)
- nice – max nice priority allowed to raise to values: [-20, 19]
- rtprio – max realtime priority
- Exit and re-login from the terminal for the change to take effect.
- More details can be found from below command:
# man limits.conf
Diagnostic Steps
- To improve performance, we can safely set the limit of processes for the super-user root to be unlimited. Edit the .bashrc file vi
/root/.bashrc
and add the following line:
# vi /root/.bashrc
ulimit -u unlimited
Recent Comments