all*_*len 3 java macos bash elasticsearch
我已经增加了我的macbook pro上的最大文件限制,以便Elasticsearch可以处理更多文件,但它无法正常工作.
我运行命令'ulimit -a',它说"打开文件"是100,000.我可以像这样运行一个简单的shell脚本:
export counter=0
while (true) ; do touch "/tmp/foo${counter}" ; export counter=`expr $counter + 1` ; done
Run Code Online (Sandbox Code Playgroud)
而且我能够创建大量文件(在我杀死脚本之前超过60,000个).
但是,使用Java代码在"/ tmp"目录的空子目录中创建RandomAccessFiles,在出现错误之前,我只能生成10,232个文件:java.io.FileNotFoundException(打开的文件太多).这是我的Java代码:
import java.io.*;
import java.util.*;
public class max_open_files {
public static void main(String ... args) throws Exception {
File testDir = new File("/tmp/tempsubdir");
testDir.mkdirs();
List<File> files = new LinkedList<File>();
List<RandomAccessFile> fileHandles = new LinkedList<RandomAccessFile>();
try {
while (true) {
File f = new File(testDir, "tmp" + fileHandles.size());
RandomAccessFile raf = new RandomAccessFile(f, "rw");
files.add(f);
fileHandles.add(raf);
}
} catch (Exception ex) {
System.out.println(ex.getClass() + " " + ex.getMessage());
}
for (RandomAccessFile raf : fileHandles) raf.close()
for (File f : files) f.delete();
System.out.println("max open files: " + fileHandles.size());
}
}
Run Code Online (Sandbox Code Playgroud)
此java代码类似于Elasticsearch中的代码,用于测试文件数量的限制(在maxOpenFiles方法的FileSystemUtils类中).所以Elasticsearch与我的Java程序有同样的问题.
为什么shell脚本可以生成比Java代码(我和Elasticsearch)更多的文件?为什么Java系统无法识别高系统对文件数量的限制?
5月13日下午4:50更新CDT:我创建了一个测试程序的C版本,以查看限制是否特定于Java,看起来是这样.下面的C版本可以打开32,765个文件,而Java代码限制为10,232个文件.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char *argv) {
char name[100];
FILE *fp;
int ndx;
for (ndx = 0; ndx < 50000; ndx++) {
sprintf(name, "/tmp/foo%d.txt", ndx);
fp = fopen(name, "w");
if (fp == NULL) {
fprintf(stdout, "Can not create file %d\n", ndx);
return 1;
}
fprintf(fp, "hello %d", ndx);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
-XX: - MaxFDLimit
指示VM禁止将文件描述符限制设置为默认最大值.默认行为是将限制设置为OPEN_MAX指定的值,即10240.通常,这是进程可能打开的最大文件数.但是,可以使用sysctl实用程序将此限制增加到用户指定的值.在这种情况下,您可能希望传递-XX:-MaxFDLimit以阻止Java VM将打开文件的数量限制为10240.
| 归档时间: |
|
| 查看次数: |
2384 次 |
| 最近记录: |