报类找不到,其实是classloader无法打开文件

在进行数据迁移过程中,通过增加消费者线程数量来提升效率时,出现了NoClassDefFoundError异常及Too many open files错误。原因是每个线程创建了大量连接导致文件描述符耗尽。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

今天将消费者线程数提高测试了一下,发现一个奇怪的错误。

--------------------------------------------------------------

ProductDetailDataHandler, [queueSize=1000] exit, current working consumer thread count is: 15Exception in thread "Handler_12" java.lang.NoClassDefFoundError: com/alibaba/intl/app/datamigration/productdetail/util/ProductDetailSerializeObjectConverter

   at com.alibaba.intl.app.datamigration.productdetail.ProductDetailDataHandler.insertRecordToDestDB(ProductDetailDataHandler.java:106)

   at com.alibaba.intl.app.datamigration.productdetail.ProductDetailDataHandler.handleData(ProductDetailDataHandler.java:79)

   at com.alibaba.intl.app.datamigration.productdetail.ProductDetailDataHandler.handleData(ProductDetailDataHandler.java:63)

   at com.alibaba.intl.app.datamigration.DataHandler.run(DataHandler.java:77)

   at java.lang.Thread.run(Thread.java:619)

Caused by: java.lang.ClassNotFoundException: com.alibaba.intl.app.datamigration.productdetail.util.ProductDetailSerializeObjectConverter

   at java.net.URLClassLoader$1.run(URLClassLoader.java:197)

   at java.security.AccessController.doPrivileged(Native Method)

   at java.net.URLClassLoader.findClass(URLClassLoader.java:188)

   at java.lang.ClassLoader.loadClass(ClassLoader.java:307)

   at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)

   at java.lang.ClassLoader.loadClass(ClassLoader.java:252)

   at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)

   ... 5 more

Caused by: java.io.FileNotFoundException: /home/forrest/work/data-migration/target/classes/com/alibaba/intl/app/datamigration/productdetail/util/ProductDetailSerializeObjectConverter.class (Too many open files)

   at java.io.FileInputStream.open(Native Method)

   at java.io.FileInputStream.<init>(FileInputStream.java:106)

   at sun.misc.URLClassPath$FileLoader$1.getInputStream(URLClassPath.java:1001)

   at sun.misc.Resource.cachedInputStream(Resource.java:59)

   at sun.misc.Resource.getByteBuffer(Resource.java:154)

   at java.net.URLClassLoader.defineClass(URLClassLoader.java:249)

   at java.net.URLClassLoader.access$000(URLClassLoader.java:56)

   at java.net.URLClassLoader$1.run(URLClassLoader.java:195)

   ... 11 more

 

报Too many open files,这是因为每个连接其实就是一个文件描述符,所以连接数太多会导致无法打开新文件。默认是1024个openfile。我启动了8个线程。每个线程有128个连接,所有线程共享一个打开文件描述符数组。所以就爆满了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值