2011-07-27 32 views
12

Tôi có ứng dụng J2EE, được triển khai trong máy chủ ứng dụng JBoss6 trong Windows (Vista 32 bit) nền tảng. Cơ sở dữ liệu của tôi là "PostgreSQL 9.0.4" và tôi đang sử dụng trình điều khiển JDBC: "postgresql-9.0-801.jdbc4.jar".Tại sao rất nhiều "postgres.exe" được tạo ra khi tôi chạy ứng dụng của mình?

Trong file ds.xml của tôi, tôi đã xác định max-pool-size = 75 và min-pool-size = 40. tôi đang sử dụng JPA/Hibernate cũng như sử dụng javax.sql.DataSource.

Trong cửa sổ "Trình quản lý tác vụ", tôi thấy rằng khi máy chủ PostgreSQL khởi động, nó tạo ra các quy trình 6 "postgres.exe". Bây giờ khi tôi triển khai/khởi động ứng dụng J2EE của tôi trong JBoss, tôi tìm thấy tổng số tổng số 66 quy trình "postgres.exe". Vì vậy, điều đó có nghĩa là 60 quy trình bưu chính khác được sinh ra (hoặc khởi chạy) vì ứng dụng của tôi đã bắt đầu.

Nếu tôi thay đổi max-pool-kích thước là sau đó tôi nhận thấy rằng tôi có tổng cộng 46 postgres.exe xử lý. Trong cả hai trường hợp, không. các quy trình postgres giảm xuống 6 khi tôi dừng ứng dụng J2EE của mình.

Vì vậy, câu hỏi của tôi, điều này có bình thường không? Các quy trình bổ sung đó có được sinh ra/khởi chạy vì 'kết nối tổng hợp' (được Hibernate sử dụng) không?

Trả lời

23

Có, điều này là bình thường. Từ số manual:

Máy chủ PostgreSQL có thể xử lý nhiều kết nối đồng thời từ khách hàng. Để đạt được điều này, nó bắt đầu ("forks") một quy trình mới cho mỗi kết nối . Từ thời điểm đó, máy khách và quy trình máy chủ mới giao tiếp mà không cần sự can thiệp của quá trình postgres gốc. Do đó, quy trình máy chủ chính luôn chạy, chờ kết nối máy khách , trong khi máy khách và các quy trình máy chủ liên quan đến và .

+0

Tại sao không sử dụng nhiều chủ đề nhẹ hơn thay vì quy trình? – farukdgn

+0

Hi @Frank Tôi đang đối mặt với cùng một vấn đề do đó tương tác DB của tôi được thực hiện bởi ứng dụng khởi động mùa xuân đã trở nên chậm chạp. Có cách nào để đóng kết nối không cần thiết không? làm thế nào tôi có thể tối ưu hóa điều này? – Hiren

Các vấn đề liên quan