2011-07-27 119 views
12

我有一個J2EE應用程序,部署在JBoss6應用服務器的Windows(Vista 32位)平臺上。我的數據庫是「PostgreSQL 9.0.4」,我使用JDBC驅動程序:「postgresql-9.0-801.jdbc4.jar」。當我運行我的應用程序時,爲什麼會創建很多「postgres.exe」?

以我ds.xml文件,我已經定義最大池尺寸= 75和最小池大小= 40。 我使用JPA /休眠以及使用javax.sql.DataSource中。

在Windows的「任務管理器」中,我發現當PostgreSQL服務器啓動時,它會創建6「postgres.exe」進程。 現在,當我在JBoss中部署/啓動我的J2EE應用程序時,我找到一個總共「postgres.exe」進程。 因此,這意味着另一個60 postgres進程產生(或啓動),因爲我的應用程序啓動。

如果更改最大池尺寸爲然後我發現我有一個總46 postgres.exe的處理。 在這兩種情況下,沒有。當我停止J2EE應用程序時,postgres進程會降低到6。

所以我的問題,這是正常的? 這些額外的進程是由於'連接池'(由Hibernate使用)而產生/啓動的嗎?

回答

23

是的,這是正常的。來自manual

PostgreSQL服務器可以處理來自 客戶端的多個併發連接。爲了達到這個目的,它開始(「分叉」)每個 連接的新過程。從那時起,客戶端和新服務器進程 進行通信,而不受原始postgres進程的干預。 因此,主服務器進程始終在運行,正在等待客戶端連接,而客戶端和關聯的服務器進程到達並且 轉到。

+0

爲什麼不使用更輕量級的線程而不是進程? – farukdgn

+0

嗨@Frank我面臨同樣的問題,由於我的數據庫交互由春季啓動應用程序執行變得緩慢。有沒有辦法關閉不必要的連接?我如何優化這個? – Hiren

相關問題