`
arganzheng
  • 浏览: 104179 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

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

阅读更多

 

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

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

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个连接,所有线程共享一个打开文件描述符数组。所以就爆满了。


分享到:
评论

相关推荐

    lassLoader的关系以及如何防止ClassLoader内存泄漏

    在Java世界中,类加载器(ClassLoader)是关键的组件之一,它负责将类的字节码文件(.class)从文件系统或网络中加载到Java虚拟机(JVM)中,使得程序能够运行。本篇文章将深入探讨ClassLoader的关系网络以及如何...

    一个简单的ClassLoader

    在Java编程语言中,`ClassLoader`是一个至关重要的组件,它负责加载类的字节码文件到JVM(Java虚拟机)中,使得程序能够运行。本文将深入探讨一个简单的`ClassLoader`实现,以及与之相关的知识点。 首先,我们来看...

    详解Android类加载ClassLoader

    Java的类加载采用的是双亲委派模型,即当一个类加载器需要加载某个类时,它首先会委托其父类加载器尝试加载,只有当父类加载器无法找到对应类时,当前类加载器才会尝试自己加载。这种设计确保了核心类库的安全性,...

    Tomcat 5.0.18 ClassLoader source code insight

    2. **类查找策略**:`WebappClassLoader`遵循“双亲委派模型”(Parents Delegation Model),首先尝试从父ClassLoader加载类,如果找不到再在自己的类路径下查找。这保证了公共类库的类优先被加载,而Web应用特有的...

    ClassLoaderTest:测试如何正确关闭类加载器,以便可以关闭基础jar文件上的文件句柄

    当我们使用自定义的URLClassLoader时,尤其需要注意类加载器的生命周期管理,因为不正确的关闭可能导致打开的文件句柄无法正确释放,从而消耗系统资源。 首先,我们来了解下类加载器的工作原理。Java中的类加载器...

    java读取项目中的文件(src目录下)

    - 在尝试读取文件时,应该始终处理可能出现的异常,如`FileNotFoundException`,确保程序在文件不存在或无法访问时能够优雅地处理错误。 8. **编码与字符集**: - 读取文本文件时,需要指定正确的字符集,如`UTF-...

    Property工具类,Properties文件工具类,PropertiesUtils工具类

    例如,提供一个静态方法`loadProperties(String filePath)`,该方法自动处理打开文件、加载属性和关闭流的细节。 7. **使用资源包**: - 如果`.properties`文件位于类路径(classpath)中,可以使用`ClassLoader....

    RAD类加载器序列

    2. **PARENT_LAST**:这种模式下,子类加载器会先尝试加载类,只有当找不到时才会委托给父类加载器。这种方式有助于确保应用程序使用的类是最新的版本。 #### 四、在RAD中设置类加载器策略 1. **切换视角**:首先...

    javaweb 读取 classes 下的文件

    总之,读取Java Web应用`classes`目录下的文件涉及到对类加载器、Servlet上下文的理解以及适当的文件操作技术。通过选择合适的方法,我们可以方便地在运行时访问和操作这些资源。对于大型项目,通常会推荐使用配置...

    eclipse中Jar 文件的创建与使用

    当我们需要将一系列类文件整合到一个可分发的单元时,Jar(Java Archive)文件就显得尤为重要。下面将详细介绍在Eclipse中如何创建和使用Jar文件。 首先,让我们理解什么是Jar文件。Jar文件是Java平台的标准归档...

    java对properties文件的操作.pdf

    可以使用类加载器(ClassLoader)的getResourceAsStream方法来加载类路径(classpath)中的属性文件。有两种常见的方法: 1. 使用ClassLoader类的getSystemResourceAsStream静态方法加载类路径根目录下的属性文件: ...

    Android动态加载之DexClassLoader学习

    如果找不到,会抛出ClassNotFoundException。 在实际开发中,DexClassLoader常用于插件化框架。例如,我们可以在运行时下载一个包含新功能的APK,从中提取出.dex文件,然后使用DexClassLoader加载这个.dex,实现新...

    动态加载jar包的实现

    这通常涉及使用`java.util.zip`包中的`JarFile`类来打开jar文件,并使用`JarEntry`来获取特定的类。 加载jar包的过程通常包括以下几个步骤: 1. 打开jar文件:使用`new JarFile("path_to_jar.jar")`创建`JarFile`...

    CustomClassLoader:Java 自定义类加载器

    我们首先尝试调用父类的`loadClass()`方法,如果找不到对应类,再进行自定义加载逻辑,例如从特定的jar文件中读取字节流并转换为类。 以下是一个简单的自定义类加载器的实现框架: ```java public class ...

    细说Tomcat如何打破双亲委派(有源码和图)

    在双亲委派模型中,WebAppClassLoader会将找不到的类委托给CommonClassLoader。 3. **CatalinaClassLoader**: Tomcat的主类加载器,主要加载Tomcat自身的组件和服务。它位于整个类加载层次的最顶层,但通常不会直接...

    java读取properties文件

    `Properties`类还提供了其他方法,如`setProperty()`用于设置属性,`store()`用于保存属性到文件,`clear()`用于清空所有属性,以及`list()`用于将属性列表打印到控制台。 总结,Java中的`Properties`类为处理`....

    JAVA读取properties文件的值

    在处理`.properties`文件时,可能会遇到文件找不到、读写权限不足等问题。因此,需要适当地捕获和处理`IOException`。 ### 8. 使用`@ConfigurationProperties` Spring框架提供了一种更高级的方式来绑定`....

    java程序开发中路径的问题

    不正确设置类路径可能导致找不到所需的类文件。 **Web应用路径** 在Java Web应用中,路径问题更为复杂。`JavaWebPath`可能指的是在Web应用上下文中的路径。Web应用的根目录通常由`ServletContext`的`getRealPath()`...

    关于读取Src下配置文件的那个传说

    1. **Java**:在Java中,如果使用Maven或Gradle构建工具,配置文件会被自动复制到类路径下的`resources`目录。使用`ClassLoader`的`getResourceAsStream`方法可以轻松读取这些文件。例如: ```java InputStream in...

Global site tag (gtag.js) - Google Analytics