今天将消费者线程数提高测试了一下,发现一个奇怪的错误。
--------------------------------------------------------------
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个连接,所有线程共享一个打开文件描述符数组。所以就爆满了。
分享到:
相关推荐
在Java世界中,类加载器(ClassLoader)是关键的组件之一,它负责将类的字节码文件(.class)从文件系统或网络中加载到Java虚拟机(JVM)中,使得程序能够运行。本篇文章将深入探讨ClassLoader的关系网络以及如何...
在Java编程语言中,`ClassLoader`是一个至关重要的组件,它负责加载类的字节码文件到JVM(Java虚拟机)中,使得程序能够运行。本文将深入探讨一个简单的`ClassLoader`实现,以及与之相关的知识点。 首先,我们来看...
Java的类加载采用的是双亲委派模型,即当一个类加载器需要加载某个类时,它首先会委托其父类加载器尝试加载,只有当父类加载器无法找到对应类时,当前类加载器才会尝试自己加载。这种设计确保了核心类库的安全性,...
2. **类查找策略**:`WebappClassLoader`遵循“双亲委派模型”(Parents Delegation Model),首先尝试从父ClassLoader加载类,如果找不到再在自己的类路径下查找。这保证了公共类库的类优先被加载,而Web应用特有的...
当我们使用自定义的URLClassLoader时,尤其需要注意类加载器的生命周期管理,因为不正确的关闭可能导致打开的文件句柄无法正确释放,从而消耗系统资源。 首先,我们来了解下类加载器的工作原理。Java中的类加载器...
- 在尝试读取文件时,应该始终处理可能出现的异常,如`FileNotFoundException`,确保程序在文件不存在或无法访问时能够优雅地处理错误。 8. **编码与字符集**: - 读取文本文件时,需要指定正确的字符集,如`UTF-...
例如,提供一个静态方法`loadProperties(String filePath)`,该方法自动处理打开文件、加载属性和关闭流的细节。 7. **使用资源包**: - 如果`.properties`文件位于类路径(classpath)中,可以使用`ClassLoader....
2. **PARENT_LAST**:这种模式下,子类加载器会先尝试加载类,只有当找不到时才会委托给父类加载器。这种方式有助于确保应用程序使用的类是最新的版本。 #### 四、在RAD中设置类加载器策略 1. **切换视角**:首先...
总之,读取Java Web应用`classes`目录下的文件涉及到对类加载器、Servlet上下文的理解以及适当的文件操作技术。通过选择合适的方法,我们可以方便地在运行时访问和操作这些资源。对于大型项目,通常会推荐使用配置...
当我们需要将一系列类文件整合到一个可分发的单元时,Jar(Java Archive)文件就显得尤为重要。下面将详细介绍在Eclipse中如何创建和使用Jar文件。 首先,让我们理解什么是Jar文件。Jar文件是Java平台的标准归档...
可以使用类加载器(ClassLoader)的getResourceAsStream方法来加载类路径(classpath)中的属性文件。有两种常见的方法: 1. 使用ClassLoader类的getSystemResourceAsStream静态方法加载类路径根目录下的属性文件: ...
如果找不到,会抛出ClassNotFoundException。 在实际开发中,DexClassLoader常用于插件化框架。例如,我们可以在运行时下载一个包含新功能的APK,从中提取出.dex文件,然后使用DexClassLoader加载这个.dex,实现新...
这通常涉及使用`java.util.zip`包中的`JarFile`类来打开jar文件,并使用`JarEntry`来获取特定的类。 加载jar包的过程通常包括以下几个步骤: 1. 打开jar文件:使用`new JarFile("path_to_jar.jar")`创建`JarFile`...
我们首先尝试调用父类的`loadClass()`方法,如果找不到对应类,再进行自定义加载逻辑,例如从特定的jar文件中读取字节流并转换为类。 以下是一个简单的自定义类加载器的实现框架: ```java public class ...
在双亲委派模型中,WebAppClassLoader会将找不到的类委托给CommonClassLoader。 3. **CatalinaClassLoader**: Tomcat的主类加载器,主要加载Tomcat自身的组件和服务。它位于整个类加载层次的最顶层,但通常不会直接...
`Properties`类还提供了其他方法,如`setProperty()`用于设置属性,`store()`用于保存属性到文件,`clear()`用于清空所有属性,以及`list()`用于将属性列表打印到控制台。 总结,Java中的`Properties`类为处理`....
在处理`.properties`文件时,可能会遇到文件找不到、读写权限不足等问题。因此,需要适当地捕获和处理`IOException`。 ### 8. 使用`@ConfigurationProperties` Spring框架提供了一种更高级的方式来绑定`....
不正确设置类路径可能导致找不到所需的类文件。 **Web应用路径** 在Java Web应用中,路径问题更为复杂。`JavaWebPath`可能指的是在Web应用上下文中的路径。Web应用的根目录通常由`ServletContext`的`getRealPath()`...
1. **Java**:在Java中,如果使用Maven或Gradle构建工具,配置文件会被自动复制到类路径下的`resources`目录。使用`ClassLoader`的`getResourceAsStream`方法可以轻松读取这些文件。例如: ```java InputStream in...