April 2024
M T W T F S S
1234567
891011121314
15161718192021
22232425262728
2930  

Categories

April 2024
M T W T F S S
1234567
891011121314
15161718192021
22232425262728
2930  

JBoss Too Many Files Open Error

 

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:

  1. 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)
  2. maybe you spot a number of files your application forgot to close
  3. ….

 

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/.bashrcand add the following line:
# vi /root/.bashrc
ulimit -u unlimited

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>