flink 打开文件数量太大
flink错误之打开文件数量太大
最近在测试时,发现代码在测试机上运行很短一段时间后就报错,查看日志,发现报打开文件数量太大,经检查发现是redis连接池没有全部关闭,调整代码后问题解决。记录一下解决办法。
解决办法
1、提交任务之前先查看linux 打开文件总数lsof |wc -l
2、提交任务,再次并多次查看linux 打开文件总数,看是否只增不减。
3、看到只增不减,问题就在这里,报警的“打开文件数量太大”并不单单指的是文件数量,还包括了创建的连接,检查代码是否有流没有关闭,链接没有关闭,或者存在漏网之鱼。
4、优化代码即可。
其他:
1、也可以直接查看进程的打开文件数量lsof -p pid| wc -l
(pid为进程号)
附上错误:
2021-05-25 13:18:59 java.io.IOException: Failed to fetch BLOB 1274a1ec66929d979383f3c2a74fcd79/p-8feaec4b542ae217e969b60765f6faa08857ca31-76ba043072f6790e3ff581f840f5f3c3 from localhost/127.0.0.1:45916 and store it under /srv/test/blobStore-8f3f38c6-ce6f-4f7b-a4c5-28997fe958bd/incoming/temp-00000010 at org.apache.flink.runtime.blob.BlobClient.downloadFromBlobServer(BlobClient.java:169) at org.apache.flink.runtime.blob.AbstractBlobCache.getFileInternal(AbstractBlobCache.java:181) at org.apache.flink.runtime.blob.PermanentBlobCache.getFile(PermanentBlobCache.java:202) at org.apache.flink.runtime.execution.librarycache.BlobLibraryCacheManager.registerTask(BlobLibraryCacheManager.java:120) at org.apache.flink.runtime.taskmanager.Task.createUserCodeClassloader(Task.java:915) at org.apache.flink.runtime.taskmanager.Task.doRun(Task.java:595) at org.apache.flink.runtime.taskmanager.Task.run(Task.java:530) at java.lang.Thread.run(Thread.java:748) Caused by: java.io.FileNotFoundException: /srv/test/blobStore-8f3f38c6-ce6f-4f7b-a4c5-28997fe958bd/incoming/temp-00000010 (打开的文件过多) at java.io.FileOutputStream.open0(Native Method) at java.io.FileOutputStream.open(FileOutputStream.java:270) at java.io.FileOutputStream.<init>(FileOutputStream.java:213) at java.io.FileOutputStream.<init>(FileOutputStream.java:162) at org.apache.flink.runtime.blob.BlobClient.downloadFromBlobServer(BlobClient.java:145) ... 7 more