在使用Multibinder,kafka(2个代理)和rabbit(1个代理)的项目上升级到spring cloud Stream2.1后,我们面临着打开文件太多的问题。
打开的文件数量一直增长到操作系统(RedHat7.3)定义的限制。
{
"name": "process.files.open",
"description": "The open file descriptor count",
"baseUnit": "files",
"measurements": [
{
"statistic": "VALUE",
"value": 1686
}
]
}
+- org.springframework.cloud:spring-cloud-stream-binder-kafka-core:jar:2.0.0.RELEASE:compile
[INFO] | | \- org.springframework.integration:spring-integration-kafka:jar:3.0.3.RELEASE:compile
[INFO] | +- org.apache.kafka:kafka-clients:jar:1.0.2:compile
[INFO] | | +- org.lz4:lz4-java:jar:1.4:compile
[INFO] | | \- org.xerial.snappy:snappy-java:jar:1.1.4:compile
[INFO] | \- org.springframework.kafka:spring-kafka:jar:2.1.10.RELEASE:compile
在第一次尝试中,我想用kafka-clients 1.0.2来尝试spring cloud Stream2.1,根据文档,这是可能的,但我面临一个问题。下面是我的带有排除的maven配置:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-kafka</artifactId>
<exclusions>
<exclusion>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-kafka</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>1.0.2</version>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-kafka</artifactId>
<version>3.1.0.RELEASE</version>
</dependency>
我有以下错误:
java.lang.NoSuchMethodError: org.apache.kafka.clients.consumer.Consumer.poll(Ljava/time/Duration;)Lorg/apache/kafka/clients/consumer/ConsumerRecords;
at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.pollAndInvoke(KafkaMessageListenerContainer.java:741)
at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.run(KafkaMessageListenerContainer.java:698)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java)
at java.base/java.lang.Thread.run(Thread.java:834)
关于打开的文件太多以及如何诊断有什么想法吗?如何使用降级的Kafka客户端进行测试?
谢谢你的帮助。
java.lang.nosuchmethoderror:org.apache.kafka.clients.consumer.consumer.poll(ljava/time/duration;)lorg/apache/kafka/clients/consumerrecords;
Spring-Kafka2.2.x需要2.0.1 kafka-clients或更高版本。
WARNING 本升级指南仅适用于 2.1 版本升级至 2.2 版本,如果你并非 2.1 版本,请查看其他升级指南,Plus 程序不允许跨版本升级! 更新代码 预计耗时: 1 小时 这是你自我操作的步骤,确认将你的 2.1 版本代码升级到 2.2 版本,如果你做过一些自定义修改可能会出现代码冲突,你需要解决。 升级依赖 预计耗时: 3 分钟 进入 Plus 程序目录,执行: composer up
WARNING 本升级指南仅适用于 2.0 版本升级至 2.1 版本,如果你并非 2.0 版本,请查看其他升级指南,Plus 程序不允许跨版本升级! 更新代码 预计耗时: 1 小时 这是你自我操作的步骤,确认将你的 2.0 版本代码升级到 2.1 版本,如果你做过一些自定义修改可能会出现代码冲突,你需要解决。 升级依赖 预计耗时: 3 分钟 进入 Plus 程序目录,执行: composer up
从Tomcat 7迁移到Tomcat 9.0之后。20(使用相同的Java版本1.8.0_25运行)我们在Linux RHEL 7上的JSF2 web应用程序存在问题。一段时间后,我们会遇到如下异常: 经过一段时间的搜索,我发现xhtml文件有许多打开的文件描述符,通过执行这个命令(其中4025是Tomcat进程ID): 这不是完整的列表-还有很多。 列出的文件数量会上下波动。对我来说,只要页面在
问题内容: 我使用多个文件来执行一些文件I / O(写入19个文件,确实如此)。写他们几百次后,我得到了。但实际上我一次只能打开几个文件。这里有什么问题?我可以验证写入是否成功。 问题答案: 在Linux和其他UNIX /类似UNIX的平台上,操作系统对进程在任何给定时间可能具有的打开文件描述符的数量进行了限制。在过去,此限制曾经是硬接线1,并且相对较小。如今,它要大得多(几百/千),并且受“软”
问题内容: 我写了一种测试套件,它占用大量文件。一段时间(2h)之后,我得到了。我仔细检查了所有文件句柄是否再次关闭它们。但是错误仍然存在。 我试图找出使用允许的文件描述符的数量以及当前打开的文件描述符的数量: 因此,如果我运行以下测试: 我得到以下输出: 真奇怪,我期望打开的文件描述符会越来越多。我的脚本正确吗? 我正在使用python的记录器和子进程。那可能是我FD泄漏的原因吗? 谢谢,丹