puniverse / quasar

Fibers, Channels and Actors for the JVM
http://docs.paralleluniverse.co/quasar/
Other
4.56k stars 574 forks source link

Uninstrumented methods (marked '**') method signature strange #214

Closed tigerMoon closed 8 years ago

tigerMoon commented 8 years ago

I use spring restTemplate and co.paralleluniverse:comsat-httpclient:0.7.0 for httpClient. I list all about relevance method in suspendables and suspendable-super. but i get a stack like:

WARNING: Uninstrumented methods (marked '**') or call-sites (marked '!!') detected on the call stack: at co.paralleluniverse.common.util.ExtendedStackTrace.here (ExtendedStackTrace.java:44 bci: 8) at co.paralleluniverse.fibers.Fiber.checkInstrumentation (Fiber.java:1626 bci: 0) at co.paralleluniverse.fibers.Fiber.verifySuspend (Fiber.java:1599 bci: 6) at co.paralleluniverse.fibers.Stack.popMethod (Stack.java:153 bci: 11) at org.springframework.http.client.InterceptingClientHttpRequest$InterceptingRequestExecution.execute(org.springframework.http.HttpRequest,byte[]) (InterceptingClientHttpRequest.java:93 bci: 242) at org.springframework.http.client.InterceptingClientHttpRequest.executeInternal(org.springframework.http.HttpHeaders,byte[]) (InterceptingClientHttpRequest.java:69 bci: 178) at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(org.springframework.http.HttpHeaders) (AbstractBufferingClientHttpRequest.java:48 bci: 177) at org.springframework.http.client.AbstractClientHttpRequest.execute) (AbstractClientHttpRequest.java:53 bci: 9) ** at org.springframework.web.client.RestTemplate.doExecute (RestTemplate.java:596 bci: 37) ** at org.springframework.web.client.RestTemplate.execute (RestTemplate.java:557 bci: 284) at org.springframework.web.client.RestTemplate.getForEntity (RestTemplate.java:289 bci: 283) at com.social.credits.integration.infra.InfraCompanyResourceImpl.getCourt (InfraCompanyResourceImpl.java:71 bci: 204) at com.social.credits.fiber.FiberServiceImpl$2.run (FiberServiceImpl.java:45 bci: 113) at com.social.credits.fiber.FiberServiceImpl$2.run (FiberServiceImpl.java:42 bci: 1) (optimized) at co.paralleluniverse.fibers.Fiber.run1 (Fiber.java:1022 bci: 1)

strange is this line at org.springframework.http.client.AbstractClientHttpRequest.execute) (AbstractClientHttpRequest.java:53 bci: 9) ** excute method has only one ')' . so i guess if something was wrong.

tigerMoon commented 8 years ago

I solved Uninstrumented methods ( marked * ) method with ' * ' in suspendable-supers like: `org.springframework.http.client.ClientHttpRequest.`.

and now I still have the problem which marked(!!) ,I do not know what does this mean:

org.springframework.http.client.InterceptingClientHttpRequest$InterceptingRequestExecution.execute(org.springframework.http.HttpRequest,byte[]) (InterceptingClientHttpRequest.java:85 bci: 87) !! (instrumented suspendable calls at: [])

tigerMoon commented 8 years ago

finally. I solved this problem by browse google group

circlespainter commented 8 years ago

The docs now contains additional troubleshooting info that should help in such cases.

tigerMoon commented 8 years ago

yeah. I have read it. thank you.

I have an another question that i use co.paralleluniverse:comsat-httpclient:0.7.0for httpClient . and use default fiber schedule which has 4 threads (equals to my computer 4 cores) . when I add the the concurrent request number . I get java.util.concurrent.TimeoutException .

My doubts is that fiber.get method Timeout relevance to the schedule thread ?
Do you have some more advice for property set (it seems that goroutine has the same problem which they solved by pools)?

circlespainter commented 8 years ago

Can you post the whole TimeoutException trace?

tigerMoon commented 8 years ago
java.util.concurrent.TimeoutException
    at co.paralleluniverse.strands.dataflow.Val.get(Val.java:193)
    at co.paralleluniverse.fibers.Fiber.get(Fiber.java:1325)
    at com.social.credits.fiber.FiberServiceImpl.getTagsAnalysis(FiberServiceImpl.java:96)
    at com.social.credits.api.FiberController.getTagsClient(FiberController.java:43)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:222)
    at co.paralleluniverse.springframework.web.method.support.FiberInvocableHandlerMethod.threadBlockingInvoke(FiberInvocableHandlerMethod.java:96)
    at co.paralleluniverse.springframework.web.method.support.FiberInvocableHandlerMethod.doInvoke(FiberInvocableHandlerMethod.java:90)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
    at co.paralleluniverse.springframework.web.servlet.mvc.method.annotation.FiberServletInvocableHandlerMethod.invokeAndHandle(FiberServletInvocableHandlerMethod.java:110)
    at co.paralleluniverse.springframework.web.servlet.mvc.method.annotation.FiberRequestMappingHandlerAdapter.invokeHandleMethod(FiberRequestMappingHandlerAdapter.java:784)
    at co.paralleluniverse.springframework.web.servlet.mvc.method.annotation.FiberRequestMappingHandlerAdapter.handleInternal(FiberRequestMappingHandlerAdapter.java:727)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:969)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:860)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:618)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:845)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.springframework.boot.actuate.autoconfigure.EndpointWebMvcAutoConfiguration$ApplicationContextHeaderFilter.doFilterInternal(EndpointWebMvcAutoConfiguration.java:291)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:102)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.springframework.boot.actuate.autoconfigure.MetricFilterAutoConfiguration$MetricsFilter.doFilterInternal(MetricFilterAutoConfiguration.java:90)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:516)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1086)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:659)
    at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:223)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1558)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1515)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)

and this is my code run(in the fiber i just call some http service):

 public Object getTagsAnalysis(String companyName, AnalysisType analysisType) {
        Fiber<Object> fiber_news = fiberResource.getNewsFiber(companyName, analysisType);
        Fiber<Object> fiber_corp = fiberResource.getCorpFiber(companyName, analysisType);
        Fiber<Object> fiber_jobui = fiberResource.getJobuiFiber(companyName);
        Fiber<Object> fiber_court = fiberResource.getCourtFiber(companyName, analysisType);
        Map<String, Object> objectMap = new HashMap<>();
        try {
            objectMap.put("news", fiber_news.get(100, TimeUnit.SECONDS));
            objectMap.put("saic", fiber_corp.get(100, TimeUnit.SECONDS));
            objectMap.put("jobui", fiber_jobui.get(100, TimeUnit.SECONDS));
            objectMap.put("law", fiber_court.get(100, TimeUnit.SECONDS));
            logger.info("do map processing");
            return enterpriseAnalysisResource.getFiberTagsAnalysisMap(objectMap).get(100, TimeUnit.SECONDS);

        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
circlespainter commented 8 years ago

Can you check if the HTTP services you're aggregating are actually replying? It could simply be that they're not replying timely because of the load (especially if they use pooling) so the requests in fibers just don't complete within the timeout. Another possibility is lost requests/reply due to network problems.

I think it's very unlikely a fibers scheduling issue because Comsat's Apache HTTP client integration is built upon the async driver and it uses the default fiber scheduler, which is a FJP and is optimized for short work bursts and very high concurrency.

tigerMoon commented 8 years ago

thank you so much again . It seems there is something wrong with my code or services. i will fix it