2015-01-31 3 views
0

최근에 나는 Heroku에 Java 응용 프로그램을 배포했습니다. 또한 배포 한 응용 프로그램에는 백그라운드 프로세스가 활성화되어 있습니다. 이 응용 프로그램은 백그라운드 프로세스가 실행되지 않고 단일 dyno에 대해 Heroku에서 할당 한 512MB에 모두 근접하는 경향이 있습니다. 백그라운드 프로세스가 켜져 있지 않으면 모든 것이 정상적으로 작동하는 것처럼 보입니다. 그러나 백그라운드 프로세스를 켜면 응용 프로그램이 할당 된 512MB보다 많은 메모리를 사용하기 시작하고 NoSuchMethodErrors가 즉시 적용됩니다. 아래에 스택 추적을 포함했습니다. NoSuchMethodError는 메모리 부족으로 인해 발생하지만 그 변수는 내가 생각할 수있는 유일한 변수입니다. 이 프로그램은 백그라운드 프로세스를 시작할 때까지 완벽하게 작동합니다.메모리 부족으로 인해 NoSuchMethodError가 발생할 수 있습니까?

정말 이상한 점은 응용 프로그램을 다시 시작한 후에도 모든 종단점에서 아무런 문제없이 JSON이 문제없이 작동하지만 그 후에 가변 길이의 시간 후에 동일한 종점에서 NoSuchMethodErrors가 발생하기 시작한다는 것입니다. 응용 프로그램이 방법을 찾은 다음 10 분 후에 더 이상 찾을 수 없습니까?

java.lang.NoSuchMethodError: org.jboss.resteasy.specimpl.BuiltResponse.getHeaders()Ljavax/ws/rs/core/MultivaluedMap; 
2015-01-31T01:06:37.924505+00:00 app[web.1]: at org.jboss.resteasy.core.ServerResponseWriter.setDefaultContentType(ServerResponseWriter.java:186) 
2015-01-31T01:06:37.924507+00:00 app[web.1]: at org.jboss.resteasy.core.ServerResponseWriter.writeNomapResponse(ServerResponseWriter.java:46) 
2015-01-31T01:06:37.924509+00:00 app[web.1]: at org.jboss.resteasy.core.SynchronousDispatcher.writeResponse(SynchronousDispatcher.java:427) 
2015-01-31T01:06:37.924510+00:00 app[web.1]: at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:376) 
2015-01-31T01:06:37.924550+00:00 app[web.1]: at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:179) 
2015-01-31T01:06:37.924552+00:00 app[web.1]: at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:220) 
2015-01-31T01:06:37.924554+00:00 app[web.1]: at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56) 
2015-01-31T01:06:37.924556+00:00 app[web.1]: at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51) 
2015-01-31T01:06:37.924558+00:00 app[web.1]: at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 
2015-01-31T01:06:37.924559+00:00 app[web.1]: at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:751) 
2015-01-31T01:06:37.924561+00:00 app[web.1]: at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:566) 
2015-01-31T01:06:37.924562+00:00 app[web.1]: at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) 
2015-01-31T01:06:37.924564+00:00 app[web.1]: at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:578) 
2015-01-31T01:06:37.924566+00:00 app[web.1]: at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:221) 
2015-01-31T01:06:37.924567+00:00 app[web.1]: at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1111) 
2015-01-31T01:06:37.924570+00:00 app[web.1]: at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:183) 
2015-01-31T01:06:37.924572+00:00 app[web.1]: at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1045) 
2015-01-31T01:06:37.924569+00:00 app[web.1]: at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:498) 
2015-01-31T01:06:37.924573+00:00 app[web.1]: at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 
2015-01-31T01:06:37.924575+00:00 app[web.1]: at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:199) 
2015-01-31T01:06:37.924576+00:00 app[web.1]: at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:109) 
2015-01-31T01:06:37.924578+00:00 app[web.1]: at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:98) 
2015-01-31T01:06:37.924579+00:00 app[web.1]: at org.eclipse.jetty.server.Server.handle(Server.java:461) 
2015-01-31T01:06:37.924581+00:00 app[web.1]: at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:284) 
2015-01-31T01:06:37.924582+00:00 app[web.1]: at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:244) 
2015-01-31T01:06:37.924584+00:00 app[web.1]: at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:534) 
2015-01-31T01:06:37.924586+00:00 app[web.1]: at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:607) 
2015-01-31T01:06:37.924587+00:00 app[web.1]: at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:536) 
2015-01-31T01:06:37.924594+00:00 app[web.1]: at java.lang.Thread.run(Thread.java:745) 

여기 내 MVN 의존성이다 : 나무

[INFO] --- maven-dependency-plugin:2.4:tree (default-cli) @ crewdriver --- 
[INFO] com.getworkers:crewdriver:war:1.2-SNAPSHOT 
[INFO] +- org.jboss.resteasy:resteasy-jaxrs:jar:3.0.9.Final:compile 
[INFO] | +- org.jboss.resteasy:jaxrs-api:jar:3.0.9.Final:compile 
[INFO] | +- org.jboss.spec.javax.annotation:jboss-annotations-api_1.1_spec:jar:1.0.1.Final:compile 
[INFO] | +- javax.activation:activation:jar:1.1:compile 
[INFO] | \- net.jcip:jcip-annotations:jar:1.0:compile 
[INFO] +- org.jboss.resteasy:resteasy-client:jar:3.0.9.Final:compile 
[INFO] +- org.jboss.resteasy:resteasy-jaxb-provider:jar:3.0.9.Final:compile 
[INFO] | \- com.sun.xml.bind:jaxb-impl:jar:2.2.7:compile 
[INFO] |  +- com.sun.xml.bind:jaxb-core:jar:2.2.7:compile 
[INFO] |  | +- javax.xml.bind:jaxb-api:jar:2.2.7:compile 
[INFO] |  | \- com.sun.istack:istack-commons-runtime:jar:2.16:compile 
[INFO] |  \- com.sun.xml.fastinfoset:FastInfoset:jar:1.2.12:compile 
[INFO] |  \- javax.xml.bind:jsr173_api:jar:1.0:compile 
[INFO] +- org.jboss.resteasy:resteasy-jackson-provider:jar:3.0.9.Final:compile 
[INFO] | +- org.codehaus.jackson:jackson-core-asl:jar:1.9.12:compile 
[INFO] | +- org.codehaus.jackson:jackson-mapper-asl:jar:1.9.12:compile 
[INFO] | +- org.codehaus.jackson:jackson-jaxrs:jar:1.9.12:compile 
[INFO] | \- org.codehaus.jackson:jackson-xc:jar:1.9.12:compile 
[INFO] +- org.jboss.resteasy:resteasy-servlet-initializer:jar:3.0.9.Final:compile 
[INFO] | \- org.jboss.resteasy:async-http-servlet-3.0:jar:3.0.9.Final:compile 
[INFO] +- org.eclipse.jetty.orbit:javax.servlet:jar:3.0.0.v201112011016:provided 
[INFO] +- net.spy:spymemcached:jar:2.11.4:compile 
[INFO] +- com.google.code.gson:gson:jar:2.2.4:compile 
[INFO] +- com.sun.jersey:jersey-client:jar:1.18.1:compile 
[INFO] | \- com.sun.jersey:jersey-core:jar:1.18.1:compile 
[INFO] +- net.fckeditor:java-core:jar:2.6:compile 
[INFO] | +- org.devlib.schmidt:imageinfo:jar:1.9:compile 
[INFO] | \- org.slf4j:slf4j-api:jar:1.5.8:compile 
[INFO] +- mysql:mysql-connector-java:jar:5.1.31:compile 
[INFO] +- com.twilio.sdk:twilio-java-sdk:jar:3.3.15:compile 
[INFO] | \- com.googlecode.json-simple:json-simple:jar:1.1:compile 
[INFO] +- com.github.spullara.mustache.java:compiler:jar:0.8.15:compile 
[INFO] | \- com.google.guava:guava:jar:16.0.1:compile 
[INFO] +- commons-lang:commons-lang:jar:2.6:compile 
[INFO] +- commons-io:commons-io:jar:2.4:compile 
[INFO] +- commons-fileupload:commons-fileupload:jar:1.3.1:compile 
[INFO] +- org.slf4j:slf4j-log4j12:jar:1.7.7:compile 
[INFO] | \- log4j:log4j:jar:1.2.17:compile 
[INFO] +- org.slf4j:slf4j-simple:jar:1.7.7:compile 
[INFO] +- com.newrelic.agent.java:newrelic-agent:jar:3.5.1:provided 
[INFO] +- com.sendgrid:sendgrid-java:jar:1.0.0:compile 
[INFO] | +- org.json:json:jar:20140107:compile 
[INFO] | \- com.mashape.unirest:unirest-java:jar:1.3.8:compile 
[INFO] |  \- org.apache.httpcomponents:httpasyncclient:jar:4.0.1:compile 
[INFO] |  \- org.apache.httpcomponents:httpcore-nio:jar:4.3.2:compile 
[INFO] +- com.sendgrid:smtpapi-java:jar:0.0.2:compile 
[INFO] +- org.apache.httpcomponents:httpclient:jar:4.3.3:compile 
[INFO] | +- org.apache.httpcomponents:httpcore:jar:4.3.2:compile 
[INFO] | +- commons-logging:commons-logging:jar:1.1.3:compile 
[INFO] | \- commons-codec:commons-codec:jar:1.6:compile 
[INFO] +- org.apache.httpcomponents:httpmime:jar:4.3.3:compile 
[INFO] +- commons-validator:commons-validator:jar:1.4.0:compile 
[INFO] | +- commons-beanutils:commons-beanutils:jar:1.8.3:compile 
[INFO] | \- commons-digester:commons-digester:jar:1.8:compile 
[INFO] +- org.eclipse.jetty.aggregate:jetty-all:jar:9.2.1.v20140609:compile 
[INFO] | +- javax.websocket:javax.websocket-api:jar:1.0:compile 
[INFO] | \- javax.servlet:javax.servlet-api:jar:3.1.0:compile 
[INFO] +- org.eclipse.jetty:jetty-plus:jar:9.2.1.v20140609:compile 
[INFO] | \- org.eclipse.jetty:jetty-jndi:jar:9.2.1.v20140609:compile 
[INFO] +- org.eclipse.jetty:jetty-webapp:jar:9.2.1.v20140609:compile 
[INFO] | \- org.eclipse.jetty:jetty-xml:jar:9.2.1.v20140609:compile 
[INFO] +- org.eclipse.jetty:jetty-servlet:jar:9.2.1.v20140609:compile 
[INFO] | \- org.eclipse.jetty:jetty-security:jar:9.2.1.v20140609:compile 
[INFO] |  \- org.eclipse.jetty:jetty-server:jar:9.2.1.v20140609:compile 
[INFO] |  +- org.eclipse.jetty:jetty-http:jar:9.2.1.v20140609:compile 
[INFO] |  \- org.eclipse.jetty:jetty-io:jar:9.2.1.v20140609:compile 
[INFO] +- org.eclipse.jetty:jetty-util:jar:9.2.1.v20140609:compile 
[INFO] +- org.eclipse.jdt:core:jar:3.3.0-v_771:compile 
[INFO] | +- org.eclipse.core:resources:jar:3.3.0-v20070604:compile 
[INFO] | | \- org.eclipse.core:expressions:jar:3.3.0-v20070606-0010:compile 
[INFO] | +- org.eclipse.core:runtime:jar:3.10.0-v20140318-2214:compile 
[INFO] | | +- org.eclipse:osgi:jar:3.10.0-v20140606-1445:compile 
[INFO] | | +- org.eclipse.equinox:common:jar:3.6.200-v20130402-1505:compile 
[INFO] | | +- org.eclipse.core:jobs:jar:3.6.0-v20140424-0053:compile 
[INFO] | | +- org.eclipse.equinox:registry:jar:3.5.400-v20140428-1507:compile 
[INFO] | | +- org.eclipse.equinox:preferences:jar:3.5.200-v20140224-1527:compile 
[INFO] | | +- org.eclipse.core:contenttype:jar:3.4.200-v20140207-1251:compile 
[INFO] | | \- org.eclipse.equinox:app:jar:1.3.200-v20130910-1609:compile 
[INFO] | +- org.eclipse.core:filesystem:jar:1.1.0-v20070606:compile 
[INFO] | \- org.eclipse:text:jar:3.3.0-v20070606-0010:compile 
[INFO] |  \- org.eclipse.core:commands:jar:3.3.0-I20070605-0010:compile 
[INFO] +- net.integrio:tools:jar:1.0:compile 
[INFO] +- xdo:xdocore:jar:1.0:compile 
[INFO] +- net.integrio:integrio-db:jar:1.1:compile 
[INFO] +- net.integrio:integrio-db-ext:jar:1.2:compile 
[INFO] +- net.integrio:integrio-js:jar:1.3.0.6:compile 
[INFO] +- net.integrio:integrio-json:jar:1.1:compile 
[INFO] +- net.integrio:integrio-utils:jar:1.2:compile 
[INFO] +- net.integrio:integrio-web-tags:jar:1.2:compile 
[INFO] +- net.integrio:integrio-web:jar:1.2:compile 
[INFO] +- org.apache.commons:commons-lang3:jar:3.3.2:compile 
[INFO] \- javax.inject:javax.inject:jar:1:compile 
+0

이 백그라운드 프로세스에는 무엇이 있습니까? 어쩌면 거기에 선언이 있습니다. 소스 코드를 게시하십시오. –

답변

1

는 메모리 부족이 NoSuchMethodError가 발생할 가능성이 있습니까?

기술적 인 관점에서 생각할 수있는 방법을 생각할 수 없습니다. 메모리가 부족하면 OutOfMemoryError 예외가 발생합니다. 그리고 무언가가 그들을 부숴 버렸다 할지라도 클래스 로딩의 잠재적 인 손상은 클래스가로드 될 수 없다는 예외를 초래할 것입니다.

NoSuchMethodError 일부 클래스의 호환되지 않는 버전을로드하려고하면 발생합니다. 특히 하나의 클래스는 두 번째 클래스의 메소드 호출을 가지고 있으며 클래스 로더가 찾은 클래스 코드 버전의 메소드가 더 이상 존재하지 않습니다.

런타임에 사용하는 BuiltResponse을 포함하는 JAR이 코드를 빌드 한 JAR과 동일한 지 확인해야합니다.

사용중인 일부 라이브러리 간의 버전이 일치하지 않을 수도 있습니다.


모든 것은 내가 백그라운드 프로세스를 켤 때하지만 내 응용 프로그램이 할당 된 512MB의보다 더 많은 메모리를 사용하여 시작하고 나는 즉시 NoSuchMethodErrors 명중하고있어, 백그라운드 프로세스가 켜져없이 잘 작동하는 것 같다.

추가 메모리 사용량은 붉은 청어라고 생각합니다. 문제는 백그라운드 프로세스 코드 및 그 종속성과 관련이 있습니다.

+0

입력 해 주셔서 감사합니다. 나는 이걸 가지고 내 머리카락을 정말로 끌어 냈다. 나는 당신이 말한 모든 것에 동의하지만, 나는 힘든 시간을 추적하면서 힘든 시간을 보내고 있었고, 어떤 미친 이유 때문에 기억이 문제가되기를 바랐다. BuiltResponse는 getHeaders() 메소드가 포함 된 javax.ws.rs.core.Response를 확장합니다. 현재 잘못된 Response 클래스를 가져 오는 위치를 추적하려고합니다. 백그라운드 프로세스가 어떻게 영향을 미치는지 잘 모르겠습니다. 지금까지 알 수 있듯이 javax.ws.rs.core.Response에 대한 언급은하지 않았다.mvn 종속성 : 트리가 포함되어 있습니다. – cregg

+0

나는 그것을 풀 었다고 생각했다. 그러나 슬프다. 나는하지 않았다. 정말 이상한 점은 애플리케이션을 다시 시작한 후에 모든 엔드 포인트가 JSON을 잠깐 동안 문제없이 사용할 수 있다는 것입니다. 그런 다음 가변 길이의 시간 후에 동일한 엔드 포인트가 NoSuchMethodErrors를 던지기 시작할 것입니다. 응용 프로그램이 방법을 찾은 다음 10 분 후에 더 이상 찾을 수 없습니까? – cregg

+0

계속 찾으십시오. 배포 플랫폼의 모든 JAR을 검사하여 클래스의 모든 인스턴스를 찾고 javap을 사용하여 메소드 서명을 검사합니다. * "어떻게 응용 프로그램에서 메서드를 찾고 10 분 후에 더 이상 찾을 수 없습니까?"* 여러 클래스 로더가 관련된 시나리오를 생각할 수 있습니다. –

관련 문제