2013-03-13 114 views
0

我們正在使用Play應用程序來頻繁查詢MySQL。事實上,幾乎每個操作都以某種方式查詢數據庫。在Play Framework 2.0.3中使用阻塞IO

據我所知,Play旨在支持異步和非阻塞應用程序,並鼓勵根據這種編碼。但是由於com.mysql.jdbc.Driver是一個阻塞的JDBC驅動程序,我沒有看到使用非阻塞查詢的方法。

當我們的應用程序被多個(6-20)用戶同時使用時,我們遇到了嚴重的性能問題。隨着您開始使用應用程序,它會隨着時間的推移而變慢。

所以我試圖改變默認的通過將這個application.conf內側,在這裏建議「高度同步應用」玩阿卡配置:http://www.playframework.com/documentation/2.1.0/ThreadPools

play { 
    akka { 
    event-handlers = ["akka.event.slf4j.Slf4jEventHandler"] 
    loglevel = WARNING 
    actor { 
     default-dispatcher = { 
     fork-join-executor { 
      parallelism-min = 300 
      parallelism-max = 300 
     } 
     } 
    } 
    } 
} 

問題我雖然是:大多數其他配置application.conf是key = value對,我只是把這個json對象直接放在文件中,它會正常工作嗎?當我這樣做時,我沒有得到任何錯誤,所以我認爲它接受了這個?

如果是,我該如何測試這是否生效?我沒有看到應用程序的性能急劇變化。所以我不確定我是否在這裏得到了根本性的錯誤。任何幫助,指針或意見將不勝感激。

我們在2個CPU和2GB xmx的Linux機器上使用OpenJDK 1.6的Play 2.0.3。

回答

0

如果你的配置文件已經有一段default-dispatcher,那麼你應該確保它使用fork-join-executor並增加parallelism-minparallelism-max的值。

您可以添加log-config-on-start = on選項play { akka { }}你的配置登錄應用程序的啓動您的全阿卡配置的部分(然後檢查是否default-dispatcher將有正確的價值觀爲parallelism-minparallelism-max)。