我們獲得了Play 1.2.5應用程序,並且我們在應用程序無響應時遇到了一些問題。Play Framework變得無法響應? (可能存在內存問題)
爲應用程序設置適當的內存設置後,問題沒有再次發生(幾天的ATM),但我想知道實際原因以及是否有方法在日誌中查看它。
在我們的設置,我們得到了
- 播放1.2.5應用程序上運行的AWS(Ubuntu的12.04)
- 的MySQL數據庫RDS
- Apache服務器工作作爲代理(SSL處理等)。
發生這個狀況是不同的電話,但我有監控運行狀況檢查與簡單renderText - 實施一個例子(僅200 &「OK」)。我們有這些「時不時」。應用程序已經返回響應而無需啓動。
Apache訪問日誌有:
(IP addr) - - [01/Mar/2013:09:31:16 +0200] "GET /monitor/healthcheck HTTP/1.1" 502 4305 "-" "NING/1.0"
Apache的錯誤日誌有:
[Fri Mar 01 09:36:16 2013] [error] [client (IP addr)] (70007)The timeout specified has expired: proxy: error reading status line from remote server localhost:8080
[Fri Mar 01 09:36:16 2013] [error] [client (IP addr)] proxy: Error reading from remote server returned by /monitor/healthcheck
(Apache在300秒= 5M代理超時長度)
播放日誌還沒有任何那裏(我們在控制器上獲得請求URL日誌記錄,所以至少請求沒有找到它的方式,或者日誌記錄有問題)
第一個想法是用盡線程。這似乎是件不可思議的事對我來說,因爲:
- 我們正在開發 - >相當低流量
- 這也發生在案件日誌以前沒有流量了幾個小時
- 我們得到了10個線程(
play.pool=10
) - 我們沒有使用異步調用WS(那些似乎有點與播放1.2.X越野車)
- 沒有似乎沒有成爲線程掛電話阻止了很長一段時間
- 隨着variuos使用有後隨機測試(審查與jstack一切似乎〜OK)
(也許相關的,也許不是):一個我們檢查時間jstack所以,它沒有一個cacll迴應:
$ jstack 7842
7842: Unable to open socket file: target process not responding or HotSpot VM not loaded
The -F option can be used when the target process is not responding
然而,試之前-F我們再次嘗試,並得到了適當的反應,所以如果在JVM在某些響應狀態,就OK了很快做到了。
在一些幫助下,我們設置了適當的內存設置,自此(上週五2013-03-01)我們沒有遇到這個問題。
jvm.memory=-Xms64m -Xmx512m -XX:PermSize=64m -XX:MaxPermSize=256m
但是,我們沒有在日誌中打印任何內存問題。我還是有點擔心,因爲我沒有一個關於實際原因頭緒,所以:
- 可能是什麼原因
- 一些內存問題,在日誌中爲什麼沒有發現?封鎖
- 一些(不確定性)的事情會離開線程長時間
- 有一些辦法看到事業日誌,如果再次出現這種情況?
- 需要一些設置來獲取日誌中的內存問題?
更新:似乎可能是問題與MySQL連接測試掛。創建another more focused question並且會在問題解決後嘗試記住更新。
你用JConsole看過JVM嗎? – allprog 2013-03-06 12:49:56
還沒有試過JConsole(可能可以設置,應該退房)。 無論如何,現在再次出現問題,我運行jstack -F,問題似乎是_com.mchange.v2.c3p0.impl.DefaultConnectionTester.activeCheckConnectionNoQuery_中有一堆線程被阻塞。我在更詳細地檢查了這個之後,會在這裏更新。 – Touko 2013-03-06 12:52:29