在Ubuntu虚拟机中持续时Ignite发生异常:打开的文件太多

在Ubuntu虚拟机中持续时Ignite发生异常:打开的文件太多,ignite,Ignite,我在java代码包xxx.jar中运行一个服务器节点,但出现如下异常: Caused by: java.nio.file.FileSystemException: /home/ranger/EIIP/tools/work/db/ServerNode/cache-TOFTableCache/part-942.bin: Too many open files at sun.nio.fs.UnixException.translateToIOException(UnixException.java:9

我在java代码包xxx.jar中运行一个服务器节点,但出现如下异常:

Caused by: java.nio.file.FileSystemException: /home/ranger/EIIP/tools/work/db/ServerNode/cache-TOFTableCache/part-942.bin: Too many open files
at sun.nio.fs.UnixException.translateToIOException(UnixException.java:91)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
at sun.nio.fs.UnixFileSystemProvider.newAsynchronousFileChannel(UnixFileSystemProvider.java:196)
at java.nio.channels.AsynchronousFileChannel.open(AsynchronousFileChannel.java:248)
at java.nio.channels.AsynchronousFileChannel.open(AsynchronousFileChannel.java:301)
at org.apache.ignite.internal.processors.cache.persistence.file.AsyncFileIO.<init>(AsyncFileIO.java:66)
at org.apache.ignite.internal.processors.cache.persistence.file.AsyncFileIOFactory.create(AsyncFileIOFactory.java:44)
at org.apache.ignite.internal.processors.cache.persistence.file.FilePageStore.init(FilePageStore.java:523)
... 31 more
这是我的代码:

        IgniteConfiguration igniteCfg = new IgniteConfiguration();
        igniteCfg.setConsistentId("ServerNode"); //Set Consistent ID

        // Ignite Persistence
        DataStorageConfiguration storageCfg = new DataStorageConfiguration();
        DataRegionConfiguration regionCfg = new DataRegionConfiguration();
        regionCfg.setName("TableCache_Region");
        regionCfg.setInitialSize(100L * 1024 * 1024);
        regionCfg.setMaxSize(8L * 1024 * 1024 * 1024);
        regionCfg.setPersistenceEnabled(true);

        storageCfg.setDataRegionConfigurations(regionCfg);
        storageCfg.setPageSize(4096); // Changing the page size to 4 KB.
        storageCfg.setWriteThrottlingEnabled(true); // Enabling the writes throttling.

        igniteCfg.setDataStorageConfiguration(storageCfg);
        igniteCfg.setWorkDirectory(System.getProperty("user.dir") + "/work"); // System.getProperty("java.class.path")

        Ignite ignite = Ignition.start(igniteCfg);
        ignite.cluster().baselineAutoAdjustEnabled(false);

        // Activate a cluster automatically once all the nodes of the baseline topology have joined after a cluster restart.
        ignite.cluster().active(true);

        // Manually setting Baseline Topology
        Collection<ClusterNode> nodes = ignite.cluster().forServers().nodes();
        // Set all server nodes to baseline topology
        ignite.cluster().setBaselineTopology(nodes);
IgniteConfiguration igniteCfg=新IgniteConfiguration();
igniteCfg.setConsistentId(“服务器节点”)//设置一致的ID
//点燃持久性
DataStorageConfiguration storageCfg=新的DataStorageConfiguration();
DataRegionConfiguration regionCfg=新DataRegionConfiguration();
regionCfg.setName(“TableCache_区域”);
regionCfg.setInitialSize(100L*1024*1024);
regionCfg.setMaxSize(8L*1024*1024*1024);
regionCfg.setPersistenceEnabled(true);
storageCfg.SetDataRegionConfiguration(regionCfg);
storageCfg.setPageSize(4096);//将页面大小更改为4KB。
storageCfg.setWriteThrottlingEnabled(true);//启用写入限制。
设置数据存储配置(storageCfg);
igniteCfg.setWorkDirectory(System.getProperty(“user.dir”)+“/work”);//System.getProperty(“java.class.path”)
Ignite Ignite=点火启动(igniteCfg);
ignite.cluster().baselineAutoAdjustEnabled(假);
//在群集重新启动后,当基线拓扑的所有节点都加入后,自动激活群集。
ignite.cluster()激活(真);
//手动设置基线拓扑
集合节点=ignite.cluster().forserver().nodes();
//将所有服务器节点设置为基线拓扑
ignite.cluster().setBaselineTopology(节点);
你知道如何解决这个问题吗? 谢谢

据我所知,要在重新启动时保持ulimits值,您应该在配置文件中进行设置:

/etc/security/limits.conf

它包含“软”和“硬”选项。root的硬选项,其他的软选项

使用ulimit命令,可以覆盖当前用户和会话的“soft”值。可能您的限制没有存储,或者您设置了“软”选项,但使用sudo命令启动GridGain,而您的“硬”选项不正确

请仔细检查并提供下一步信息:

1) 您使用的是什么操作系统

2) 您的环境中是否有/etc/security/limits.conf文件

3) 对于将启动点火的用户,您是否有正确的值。如果您是在根目录下启动的,请检查“硬”选项

但是,我建议在此处设置以下选项:

ignite soft nofile 65536
ignite hard nofile 65536
ignite soft nproc 65536
ignite hard nproc 65536

其中ignite是用于ignite启动的用户名。

您有多少个节点和缓存?我想您可能会尝试增加描述符的数量,并检查结果。感谢您的回复,我有一个上面这样的服务器节点并设置持久性,然后启动一个客户端节点来创建缓存和表,在客户端节点中创建4个缓存和4个表,如下代码:``dmsTableCache.put(dmsTableCache.sizeLong(),新的DMSTable(dmsTableCache.sizeLong(),timeStamp,dmsKVCache))```这看起来不多,但除了Anrei的答案之外,我还想分享docs页面非常感谢,我尝试过,但仍然存在问题…有时需要重新启动主机。它可以帮助应用新的更改。你重启了你的主机吗?是的,我重启了,,,我怀疑这是否是虚拟机的问题,毕竟官方的Ubuntu没有这个例外。或者由于某种原因,虚拟机中的修改没有生效
ignite soft nofile 65536
ignite hard nofile 65536
ignite soft nproc 65536
ignite hard nproc 65536