网站的申请,线上培训机构,chinacd.wordpress0,石家庄规划java.io.IOException: Too many open files
前言#xff1a; 项目最近报 java.io.IOException: Too many open files 问题#xff0c;大概意思是#xff1a;意味着你的应用程序尝试打开的文件描述符数量超过了系统允许的最大数量#xff0c;在linux中每个进程打开的文件描…java.io.IOException: Too many open files
前言 项目最近报 java.io.IOException: Too many open files 问题大概意思是意味着你的应用程序尝试打开的文件描述符数量超过了系统允许的最大数量在linux中每个进程打开的文件描述是有一定限制的。导致项目运行不起来找了好几天记录一下。
一、问题排查
1查看所有进程信息
-- 查看所有进程消息
jps -l
-- 找到java进程的PID
ps aux | grep 应用名称2下面用 lsof 命令使用讲解排查的逻辑 lsof: list open files 【列出来打开的命令】
-- 计算进程打开的文件数
lsof -p 进程号 | wc -l进程 82253 打开的文件数是 2289 系统默认是 1024 命令如下
-- 查看系统默认进程打开的文件个数
ulimit -n二、 解决方案
1可以临时增加进行打开文件的个数 – 将进程打开个数临时修改为 65535 ulimit -n 65535
2查看占用端口的文件是哪个 lsof -p xxxxx 最后发现有个关于 kafka打开的文件过多
3将所有关于kafka关闭 进程维持在200左右问题解决
问题分析
1之前对接kafka 做消费者时候是有个while(true) 循环不断拉取数据 2现在是有个定时器每5分钟拉取一波数据代码如下问题出现在 每5分钟拉取一波数据但是consumer 始终没有关闭。要关闭consumer 进程打开数据量是有限的。【之前对接kafka都是不断轮训拉取数据使用whiletrue 循环也管自己没有考虑到索引进行打开的文件数始终在增加】 定时器 Scheduled(cron 0 0/5 * * * ?)public void physicalAlarmConsumerTask(){kafkaReportClient.physicalAlarmTopicConsumer();}消费者
public void physicalAlarmTopicConsumer(){Date currentDate new Date();// 1.配置KafkaProperties properties new Properties();properties.put(bootstrap.servers,xxx);properties.put(group.id,xxx);properties.put(enable.auto.commit,false);properties.put(key.deserializer, org.apache.kafka.common.serialization.StringDeserializer);properties.put(value.deserializer, org.apache.kafka.common.serialization.StringDeserializer);KafkaConsumerString, String consumer new KafkaConsumer(properties);consumer.subscribe(Collections.singleton(xxxaacctopic));// 2.消费消息ConsumerRecordsString, String records consumer.poll(Duration.ofMillis(5000));// 3.数据解析for (ConsumerRecordString, String record : records) {JSONObject jsonObject JSON.parseObject(record.value());// TODO:业务逻辑... }// 4.提交offsetconsumer.commitAsync(new OffsetCommitCallback() {Overridepublic void onComplete(MapTopicPartition, OffsetAndMetadata offsets, Exception e) {if (e ! null){log.error(xxx commit offset is error,offsets:{},e:{}, offsets, e);} else {log.info(xxxx offset commit success);}}});}小节
1如果在有类似 Too many open files 看下是哪个端口下的服务 2lsof -P -i :xxx 【指定端口占用情况】 3lsof -p xxx 【占用端口文件是哪个具体分析】 4lsof -p xxxx | wc -l 注xxx为进程号。
喜欢我的文章记得点个在看或者点赞持续更新中ing…