“Too many openfiles” error com Glassfish no Ubuntu

1

Estou tendo problemas com o ajuste do Glassfish 2.1.1 no Ubuntu 10.04 LTS de 64 bits (Amazon EC2). Assim que altero a contagem de encadeamentos do Serviço HTTP do valor 5 padrão para 100, obtenho os seguintes erros no server.log.

java.net.SocketException: Too many open files

Outros erros incluem:

[#|2011-05-19T15:41:38.034-0500|SEVERE|sun-appserver2.1|javax.enterprise.system.tools.deployment|_ThreadID=16;_ThreadName=Timer-20;_RequestID=1bd7cd3e-0011-4ebc-95e5-487b96c76b20;|"DPL8011: autodeployment failure while deploying the application : null"|#]

[#|2011-05-19T15:41:39.555-0500|WARNING|sun-appserver2.1|javax.enterprise.system.stream.err|_ThreadID=20;_ThreadName=Timer-1;_RequestID=0d9630b5-2752-4ffb-ac7c-1cf51920155a;|
java.lang.NullPointerException
    at com.sun.jbi.management.system.AutoAdminTask.pollAutoDirectory(AutoAdminTask.java:1031)
    at com.sun.jbi.management.system.AutoAdminTask.performAutoInstall(AutoAdminTask.java:329)
    at com.sun.jbi.management.system.AutoAdminTask.performAutoFunctions(AutoAdminTask.java:288)
    at com.sun.jbi.management.system.AdminService.heartBeat(AdminService.java:967)
    at com.sun.jbi.management.system.AdminService.handleNotification(AdminService.java:198)
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor$ListenerWrapper.handleNotification(DefaultMBeanServerInterceptor.java:1732)
    at javax.management.NotificationBroadcasterSupport.handleNotification(NotificationBroadcasterSupport.java:257)
    at javax.management.NotificationBroadcasterSupport$SendNotifJob.run(NotificationBroadcasterSupport.java:322)
    at javax.management.NotificationBroadcasterSupport$1.execute(NotificationBroadcasterSupport.java:307)
    at javax.management.NotificationBroadcasterSupport.sendNotification(NotificationBroadcasterSupport.java:229)
    at javax.management.timer.Timer.sendNotification(Timer.java:1237)
    at javax.management.timer.Timer.notifyAlarmClock(Timer.java:1206)
    at javax.management.timer.TimerAlarmClock.run(Timer.java:1289)
    at java.util.TimerThread.mainLoop(Timer.java:512)
    at java.util.TimerThread.run(Timer.java:462)
|#]

e

[#|2011-05-19T16:30:40.228-0500|SEVERE|sun-appserver2.1|org.apache.jasper.servlet.JspServlet|_ThreadID=16;_ThreadName=httpWorkerThread-4949-48;_RequestID=63d6908e-cc09-4fa8-aac0-241e7582c42f;|PWC6117: File "/opt/glassfish-v2.1.1-b31g/lib/install/applications/admingui/adminGUI_war/header.jsp" not found|#]

e

[#|2011-05-19T16:30:40.229-0500|SEVERE|sun-appserver2.1|org.apache.jasper.servlet.JspServlet|_ThreadID=17;_ThreadName=httpWorkerThread-4949-46;_RequestID=869579eb-887d-4dc4-b0fc-edc4e41755a7;|PWC6117: File "/opt/glassfish-v2.1.1-b31g/lib/install/applications/admingui/adminGUI_war/homePage.jsp" not found|#]

Pesquisando, encontrei os seguintes recursos:

http://felipeferreira.net/?p=873 http://www.netadmintools.com/art295.html

Meu /etc/security/limits.confg tem a seguinte configuração. E alterei as configurações do tcp, conforme observado no link

*       soft    nofile          65535
*       hard    nofile          65535
*       soft    stack           unlimited
*       hard    stack           unlimited

/ proc / sys / fs / file-max tem um valor de 762655 (eu não mudei isso), mas eu adicionei ao /etc/sysctl.conf como 'fs.file-max = 762655'

saída ulimit

$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 20
file size               (blocks, -f) unlimited
pending signals                 (-i) 16382
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65535
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) unlimited
cpu time               (seconds, -t) unlimited
max user processes              (-u) unlimited
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Alguma idéia do que pode estar causando esse problema? Obrigado antecipadamente!

    
por Hoon 19.05.2011 / 23:42

3 respostas

1

Para ver os limites reais do processo em execução, você pode usar o / proc, apenas obter o pid do seu processo glassfish / java e ver o cat / proc / $ PID_OF_PROCESS / limits Deve ser "Max abrir arquivos" lá. Além disso, você pode monitorar o número de arquivos abertos com "lsof -p".

    
por 20.05.2011 / 14:24
0

Continuando a resposta anterior: 1. Você reiniciou seu servidor glassfish depois de alterar o limits.conf? 2. O que é usado no glassfish? Os limites correspondem ao que você definiu no limits.conf? Às vezes os scripts de inicialização irão chamar ulimit para você, sobrescrevendo o que você definiu em limits.conf 3. Você menciona sua corrida Ubuntu 10.04. Verifique e veja se o seu pam setup load pam_limits.so, caso contrário seu limits.conf será ignorado

    
por 20.05.2011 / 11:22
0

Tente adicionar a linha em /etc/pam.d/common-session:

session required pam_limits.so

e reinicialização podem ser necessários.

    
por 21.06.2013 / 01:56