2

我們正試圖調試在Google Cloud上運行的看似部分停頓的Apache Beam作業。我們的工作從PubSub讀取消息,以各種方式轉換它們,並將結果流式傳輸到幾個BigQuery表格。部分工作仍然活躍 - 我們的幾個表正在更新。但其他部分似乎停滯不前,數小時前的最後一次數據庫表更新(上午2:35)。不幸的是,我們在日誌中看不到有用的例外。我們只有一小部分用戶生成的日誌消息,每分鐘發一次,並且這些消息已經停止,最後一個在上午2:35。大約一個小時後,Beam增加了每個自動擴展管道的工作人員數量,可能會在我們的部分管道中減少積壓。Apache Beam作業在Google Cloud上停滯 - CPU處於高速運行狀態

沒有有用的日誌,我唯一的線索是

  • 一些工人似乎都停留在100%的CPU
  • Java進程看的/ var /日誌/數據流/風車/對這些工人顯示一個警告和錯誤日誌在上午02點36分更新了的消息像

    W0811 02:35:43.005868 19 work_service_client.cc:958] flowingestion-gcla-081020-08101355-256d-harness-jmb 
    5 Unable to update setup work item 5076700766800503996 error: DEADLINE_EXCEEDED: Http(504) Gateway Timeout 
    E0811 02:36:12.814573 208 work_service_client.cc:689] flowingestion-gcla-081020-08101355-256d-harness-jmb 
    5 Lost lease for work with id 1911643509568450683 
    

E0811 02:36:12.821274 208 work_service_client.cc:689] flowingestion-gcla-081020-08101355-256d-harness-jmb 
    5 Lost lease for work with id 8994368075509118540 
    E0811 02:36:12.821322 208 work_service_client.cc:689] flowingestion-gcla-081020-08101355-256d-harness-jmb 
    5 Lost lease for work with id 8994368075509118575 

有沒有人有什麼建議去哪裏從這裏?

如果Google雲團隊的任何人都可以看一看,我們的工作ID是2017-08-10_13_55_26-6781083469468673800。

回答

2

我們想通了,這個問題從我們自己的代碼梗...

一個在我們的流水線階段的嘗試解壓縮從PubSub的它的輸入。出了點問題,解壓縮停留在CPU限制的循環中。

爲了確定這一點,我們做了以下內容:使用谷歌Compute Engine的Web界面

  • ,我們彼此看着工人在過去的幾個小時的CPU歷史。從Apache Beam流水線開始運行以來,少數用戶在上午2:35左右顯示CPU使用率急劇增加(!)
  • 我們使用ssh連接到其中一個實例,運行最高,並找到了一個100%CPU的Java進程。
  • 我們無法用jstack獲取堆棧跟蹤 - 它報告過程沒有「似乎是一個熱點VM」。我們可以向線程轉儲的pid發出SIGQUIT,但描述符1已連接到管道。所以我們用strace -f -s 256 -o strace.out連接到pid,發出SIGQUIT,然後從strace.out重建線程轉儲。

輸出結果顯示在我們自己的代碼中運行一個有趣的線程(超過300個)。這揭示了這個問題。

我很想聽聽有沒有人有這樣做的更加優美的方式:-)

相關問題