簡體   English   中英

CAMEL線程鎖定在servicemix上

[英]CAMEL thread lock on servicemix

我在ServiceMix中遇到駱駝問題。

我通過駱駝碼頭,駱駝收件人列表在servicemix中制作了webservice。 該程序包性能很好,但是發生了資源鎖定和線程已滿。 該系統每秒處理40個呼叫。

問題是池線程有時無法正確釋放。 在啟動應用程序幾小時后,我可以使用jstack工具看到一些線程被卡在WAITING狀態:

配置如下:-servicemix 5.3.0-駱駝2.13.2-使用組件(駱駝碼頭,基於駱駝收件人列表的Spring DSL)

-資源

<route customId="true" >
<from uri="direct:giop_addr_async">
    <recipentList>
          <simple>jetty://http://api.host.lm?x=${header.x}&y=${header.y}</simple>
    </recipentList>
    <bean ref="soapDecode" method="userDecode"/>
    <to uri="direct:sendEndPoint">
</route>
<route customId="true>
    <from uri="direct:sendEndPoint">
    <to uri="jetty://http://resultMap?httpClient.soTimeout=80000"/>
</route>

--------------日志

ps -eLf  | wc -l --> 32500 



"CamelJettyClient(0x3d0b240d)-26916" damen prio=10 tid=0x000000000ff69800 nid =0x10ef wating on condition [0x00002b4b3ba3f0000] 
   java.lang.Thread.State: TIMED_WAITNG(parking) 
     at sun.misc.Unsafe.park(Native Method) 
 - parking to wait for <0x000000006f13f19b0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) 
 at java.util.concurrent.locks.LocsSupport.parkNanos(LockSupport,java:226) 
 at org.eclipse.jetty.util.BlockingArrayQueue.poll(BlockingArrayQueue.java:342) 
 at org.eclipse.jetty.util.thread.QueuedThreadPool.idleJobPoss(QueuedThreadPool.java:526) 
 at org.eclipse.jetty.tuil.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:572) 
 at java.lnag.thread.run(Thread.java:745) 

上面的日志超過30000行。

您能否提出可以檢查的其他內容? 我想念什么嗎? 或者這可能是駱駝中的錯誤?

使線程處於等待狀態並非異常,但是30.000個線程很多。

您正在使用recipientList :對於x和y的每種組合,您都在創建一個新的碼頭生產者。 每個碼頭生產者都有自己的線程池,駱駝將最后創建的生產者保存在緩存中:這里創建了大量線程池和線程。

您不需要收件人列表即可動態構建URL。 您可以使用標題Exchange.HTTP_URI

例如:

<route customId="true" >
<from uri="direct:giop_addr_async">
    <setHeader headerName="CamelHttpUri">
          <simple>jetty://http://api.host.lm?x=${header.x}&y=${header.y}</simple>
    </setHeader>
    <to uri="jetty://http://api.host.lm"/>
    <bean ref="soapDecode" method="userDecode"/>
    <to uri="direct:sendEndPoint">
</route>
<route customId="true>
    <from uri="direct:sendEndPoint">
    <to uri="jetty://http://resultMap?httpClient.soTimeout=80000"/>
</route>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM