繁体   English   中英

Jboss 7 中打开的文件太多错误

[英]Too many open files error in Jboss 7

目前在我们的生产环境中,我们面临着“打开的文件太多”之类的问题。 该应用程序运行了 2 年没有任何重大问题,但突然间我们收到以下错误

[org.jboss.as.server.deployment.scanner] (DeploymentScanner-threads - 2) WFLYDS0012: Scan of /jboss/jboss-eap-7.0/mpayservices/deployments threw Exception: java.lang.RuntimeException: WFLYDS0032: Failed to list files in directory /jboss/jboss-eap-7.0/example/deployments. Check that the contents of the directory are readable.
    at org.jboss.as.server.deployment.scanner.FileSystemDeploymentService.listDirectoryChildren(FileSystemDeploymentService.java:1287)
    at org.jboss.as.server.deployment.scanner.FileSystemDeploymentService.scanDirectory(FileSystemDeploymentService.java:781)
    at org.jboss.as.server.deployment.scanner.FileSystemDeploymentService.scan(FileSystemDeploymentService.java:570)

 java.io.FileNotFoundException: /rsa/rsa_a.pem (Too many open files)
2018-07-11 10:39:13,015 ERROR [stderr] (default task-103)   at java.io.FileInputStream.open0(Native Method)
2018-07-11 10:39:13,015 ERROR [stderr] (default task-103)   at java.io.FileInputStream.open(FileInputStream.java:195)

这是打开文件的代码

private PrivateKey getPemPrivateKey(String filename) {

        File file = new File(filename);

        try (FileInputStream fileInputStream = new FileInputStream(file);
                DataInputStream dataInputInstream = new DataInputStream(fileInputStream);) {
            byte[] keyBytes = new byte[(int) file.length()];
            dataInputInstream.readFully(keyBytes);
            String privKeyPEM = new String(keyBytes);
            privKeyPEM = privKeyPEM.replace(PRIVATE_KEY_HEADER, "");
            privKeyPEM = privKeyPEM.replace(PRIVATE_KEY_FOOTER, "");

            byte[] decoded = Base64.decodeBase64(privKeyPEM);

            PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(decoded);
            KeyFactory keyFactory = KeyFactory.getInstance(RSA_KEY_FACTORY_INSTANCE);
            PrivateKey key = keyFactory.generatePrivate(spec);
            return key;
        }
        catch (NoSuchAlgorithmException | InvalidKeySpecException | IOException e) {
            e.printStackTrace();
            return null;
        }finally {

        }
    }

根据java 1.7,我们将流放入try to block以自动关闭资源。

但是我们仍然收到错误。但是一旦服务器重新启动它就可以正常工作两三个小时之后问题再次出现。

我们检查了 ulimit -n

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

我们正在检查两天以解决这个问题。但我们仍然没有任何想法来关闭它。

任何帮助将不胜感激!!!!

根据上面的日志, FileSystemDeploymentService.listDirectoryChildren()是导致上面的deployment.scanner服务错误的原因。

如果您不使用部署扫描器,您可以简单地禁用它。 看起来这可能是操作系统问题。 确保您使用的用户对该目录具有权限。

JBoss开发人员文档以获取更多参考。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM