2011-11-24 21 views
17

Tôi có một ứng dụng đang nhận được khá lớn, và thời gian khởi động mùa xuân là khoảng 20 giây. Để sử dụng sản xuất, điều này là tốt, nhưng để phát triển, đây là một nỗi đau lớn.Cách tốt nhất để cấu hình thùng chứa mùa xuân để tìm hiểu cách tối ưu hóa thời gian khởi động của nó là gì?

Công cụ hay cách tiếp cận hồ sơ tốt có thể cung cấp cho tôi chính xác thông tin tôi cần để tìm ra những gì mất quá nhiều thời gian? Có lẽ đó là điều tôi có thể tối ưu?

Ứng dụng của tôi là ứng dụng web mùa xuân/ngủ đông khá điển hình. Có khoảng 50 bảng cơ sở dữ liệu và vài trăm đậu (như 200-300 ... tôi không tính). Có một vài hạt @Configurable. Rất nhiều quét thành phần. Tôi cũng đang sử dụng Spring Security.

Tôi đã làm một số thông tin sơ cấp hóa với log4j - chỉ ở cài đặt INFO. Dưới đây là một số trong những điều mà đang dùng một chút thời gian:

  • INFO DefaultListableBeanFactory: 555 - độc thân-instantiating Pre - 2 giây
  • INFO SessionFactoryImpl: 202 - xây dựng nhà máy phiên - 2 giây
  • INFO HibernateTransactionManager: 415 - Sử dụng DataSource [com.mchange.v2.c3p0.ComboPooledDataSource ......] của Hibernate SessionFactory for HibernateTransactionManager - 7 giây

Có một vài điều mà phải mất 0,5 để có thể 1 giây nhiều nhất, nhưng những 3 là những người lớn.

+0

Bạn có thể quan tâm [SPR-8767 - Khởi tạo hạt song song trong khi khởi động] (https://jira.springsource.org/browse/SPR-8767) –

+1

Thú vị. Tôi thấy thật thú vị khi người Spring nói họ sẽ không xem xét điều này cho đến khi một số người phàn nàn rằng nó quá chậm. Tôi có một mình không? Tôi nghĩ rằng nó đã được làm chậm từ năm 2002:/Không có vấn đề bao nhiêu máy tính tôi đi qua mỗi vài năm, tôi luôn luôn có thể đếm vào mùa xuân bắt đầu lên lần chậm. – egervari

+0

Tôi nghĩ rằng anh ta có nghĩa là họ sẽ xem xét khi đủ người sẽ phàn nàn nó ảnh hưởng đến năng suất +1 btw câu hỏi tốt :) –

Trả lời

-1

Bạn cũng có thể sử dụng thông tin chi tiết về mùa xuân.

1

Một tùy chọn bạn có thể thử là sử dụng tùy chọn mặc định-lười-init để khởi tạo lười biếng các hạt. Spring khởi tạo tất cả các bean có phạm vi đơn trong quá trình khởi tạo. Đọc Đậu nành được tạo ra nhanh chóng phần của reference doc.

Đảm bảo tham số hóa giá trị để bạn có thể thay đổi giá trị thành đúng trong thời gian dev và sai trong khi triển khai sản xuất.

Quét thành phần chậm. Refer to this post về cách tắt tính năng này khi bạn sử dụng Autowiring.

+0

Shucks, tôi đang sử dụng @Autowired cho đậu của tôi, không phải là xml:/Tôi sẽ thử nó với đậu thuộc tính cấp cao nhất. Tôi hy vọng nó hoạt động – egervari

+0

Tôi không thể có được mùa xuân để sử dụng các tập tin thuộc tính với một trong những cấp cao nhất. Nó không quan trọng mặc dù. Nó làm cho rất ít sự khác biệt khi tôi thậm chí hardcode nó: ( – egervari

+0

Tôi không thể có được những hạt cà phê để không pre-instantiate hoặc – theblang

-1

20 giây để khởi động ứng dụng. điều đó không quan trọng. Vấn đề là thời gian bạn cần để chạy thử nghiệm của bạn!

  • Vì vậy, hãy viết thử nghiệm của bạn bằng Trình khởi động không cần khởi động lò xo.
  • Để có nhiều tích hợp hơn như thử nghiệm, hãy thử tách cấu hình để chỉ các hạt được khởi tạo cần thiết cho một số thử nghiệm.
+4

Tôi đã bị đốt cháy nhiều lần khi dịch vụ lớp thử nghiệm đã không chạy với một cơ sở dữ liệu thực sự. Tôi cũng không thấy nhiều điểm kiểm tra các bộ điều khiển như kiểm tra đơn vị hoặc là - kiểm tra các chú thích và toàn bộ ngăn xếp là loại thử nghiệm duy nhất mà Nếu Hibernate không có rất nhiều gotchas và các kịch bản thời gian chạy kỳ lạ mà không thể bị bắt/kiểm tra ở lớp dao, tôi sẽ đồng ý, nhưng tôi nghĩ rằng rất có thể người ta có thể bị đốt cháy bằng cách chế nhạo ứng dụng mùa xuân. – egervari

0

Tôi rất buồn vì tất cả các câu trả lời đều tập trung vào cách cải thiện hiệu suất và không có câu nào trong số chúng thực sự giúp bạn phân tích. Tôi đã sử dụng YourKit để có hiệu quả tuyệt vời trong các vấn đề về lược tả khác, nhưng không thể nói với tính hữu dụng của nó khi khởi động Spring.

Tôi đã thành công tốt trong việc tách cấu hình mùa xuân thành các tệp riêng biệt và chỉ tải các tệp cần thiết cho một thử nghiệm cụ thể. Điều này làm việc đặc biệt tốt cho tôi bởi vì tôi đang sử dụng Camel mà là tốn kém để bắt đầu và không được sử dụng bởi hầu hết các bài kiểm tra của tôi. Tôi đã sử dụng H2 để tôi có thể chạy thử nghiệm các DAO + Dịch vụ của mình dựa trên cơ sở dữ liệu mà không cần khởi động/tắt máy phức tạp (mặc dù phải mất một thời gian để có được tất cả những kết nối đó thành công). Tuy nhiên, tôi vẫn gặp sự cố khi khởi động toàn bộ ứng dụng để thử nghiệm tương tác. Nó cũng chậm cho tôi.

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