Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 生产过程中的错误:“;超出总承包商间接费用限额;_Java_Garbage Collection_Jvm_Apache Karaf - Fatal编程技术网

Java 生产过程中的错误:“;超出总承包商间接费用限额;

Java 生产过程中的错误:“;超出总承包商间接费用限额;,java,garbage-collection,jvm,apache-karaf,Java,Garbage Collection,Jvm,Apache Karaf,我需要一个提示或者一个工具,来尝试优化80000条记录。这个问题最重要的是要尝试理解一种模拟的方式,因为问题正在进入生产阶段,我没有,或者更好地说,到目前为止,我还没有在OSGI框架中构建应用程序的特定工具Java 更确切地说,如果有其他方法,除了: export JAVA_MIN_MEM=256M#JVM的最小内存 导出JAVA_MAX_MEM=1024M#JVM的最大内存 导出JAVA_PERM_MEM=128M#JVM的最小PERM内存 导出JAVA_MAX_PERM_MEM=256M#J

我需要一个提示或者一个工具,来尝试优化80000条记录。这个问题最重要的是要尝试理解一种模拟的方式,因为问题正在进入生产阶段,我没有,或者更好地说,到目前为止,我还没有在OSGI框架中构建应用程序的特定工具Java

更确切地说,如果有其他方法,除了:

export JAVA_MIN_MEM=256M#JVM的最小内存
导出JAVA_MAX_MEM=1024M#JVM的最大内存
导出JAVA_PERM_MEM=128M#JVM的最小PERM内存
导出JAVA_MAX_PERM_MEM=256M#JVM的最大内存

下面是两个调用的示例形式:

curl -X POST 
http://localhost:8182/cxf/rest/ped/v1/terminals/shops 
 -H 'Content-Type: application/json' 
 -H 'Postman-Token: 743b0fdb-9df9-4751-ad8c-b0f7a4f96e87' 
 -H 'cache-control: no-cache' 
 -d '{
 "correlationId": "1cb67b93-783e-48e3-9820-bd936ca14df0",
 "terminalId": "0",
 "includeServiceDetail": "0"
'

(它的本地主机,因为它在SSH中)

在这两种情况下,都显示错误500

下面是日志,进入生产:

错误:

原因: org.apache.cxf.interceptor.Fault:超出GC开销限制
位于org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:162)
位于org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:128)
位于org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:193)
位于org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:103) ...
位于org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:589)
位于java.lang.Thread.run(Thread.java:748) 原因:java.lang.OutOfMemoryError:超出GC开销限制`


对于一篇到目前为止还没有读过的文章,一切都很有帮助,甚至是一条评论。

这句话在谷歌的第一次点击似乎提供了相当多的信息

从本质上讲,Java服务器进程有一定数量的内存可供使用—每次通过调用
new…
创建对象时,都会使用部分内存。当Java开始在内存不足的情况下运行时,会有一个后台任务,称为垃圾收集器,它会识别哪些对象不再需要,并释放内存以便重用。您收到的特定错误消息意味着垃圾收集器无法回收足够的内存以使程序继续

如果您对Java服务器进程的运行方式了解得足够多,那么您可以从尝试增加提供给它使用的内存(堆)大小开始。如果您是通过命令行运行它,那么您应该将
-Xmx
参数传递给
java
程序,使其大小大于默认值(因此请尝试类似
-Xmx1G
的方法开始)。如果您是通过某个应用程序容器(例如Tomcat)运行的,则需要找到配置文件,其中包含传递到
java
的命令,并将其设置在那里

curl -X POST 
http://localhost:8182/cxf/rest/ped/v1/terminals/shops 
 -H 'Content-Type: application/json' 
 -H 'Postman-Token: e29a3956-16e7-496d-af81-f5b424c41d4c' 
 -H 'cache-control: no-cache' 
 -d '{
 "correlationId": "5c62e30a-baff-469a-993f-429559979e7a",
 "includeServiceDetail": "0"
'