2009-01-11 37 views
6

Hey cộng đồng stackoverflow!Sử dụng CPU quá ít trong Java

Tôi đang gặp sự cố trong đó chương trình thuật toán có liên quan cao đang sử dụng sử dụng CPU QUÁ LITTLE: khoảng từ 3 đến 4%. Mất rất nhiều thời gian để trả lại kết quả, và tôi tin rằng nó không hoạt động đủ mạnh.

Có ai trong số các thiên tài của bạn có bất kỳ ý tưởng nào tại sao điều này sẽ xảy ra - nếu có bất kỳ điều gì tôi mong đợi sẽ sử dụng 100%. Một chi tiết bổ sung là chương trình làm cho chèn vào một cơ sở dữ liệu sqlite3, và do đó có, có rất nhiều cuộc gọi JNI thông qua thư viện sqlite3jdbc tôi tin. (Lưu ý rằng tôi muốn trì hoãn các chèn này với một lô PreparedQuery trước đó, nhưng điều này gây ra các vấn đề bộ nhớ lớn - có rất nhiều dữ liệu).

Cảm ơn trước

CẬP NHẬT: Đã sửa lỗi. Vâng, tôi đã chỉ là một doofus, nhưng tôi đã không mong đợi rằng sqlite sẽ bắt đầu một giao dịch mới và làm rất nhiều chi phí.

Tôi hiện đang sử dụng mục PreparedStatement và xếp hàng 32768 trước khi chèn - có vẻ như là một con số đủ tốt cho tôi.

Trả lời

1

Rõ ràng là các cuộc gọi cơ sở dữ liệu đang gây ra sự chậm trễ. Nó không phải là một lựa chọn để tạo ra các lô nhỏ hơn và kiểm tra nếu điều đó giúp ?? Có lẽ bạn có thể song song các thuật toán cũng như có một hàng đợi một nơi nào đó lấy kết quả và thread khác làm sạch hàng đợi đó?

chỉnh sửa:

Ngoài ra còn có một số vấn đề khu vực khác:

  • Cơ sở dữ liệu optimalization (model)
  • Cơ sở dữ liệu cấu hình máy chủ
  • tốc độ đĩa

Tất cả những yếu tố này nên được đưa vào tài khoản

1

Nếu bạn đang viết nhiều dữ liệu, có vẻ như bạn có thể bị ràng buộc đĩa. Hãy xem số liệu thống kê đĩa io của bạn trên máy và nếu đó thực sự là nút cổ chai, hãy tìm phần cứng với io tốt hơn hoặc tìm ra cách viết ít hơn.

4

Tôi sẽ không bao giờ đề nghị ai đó sử dụng trình điều khiển JDBC với JNI nếu có loại IV, 100% phiên bản Java. Google đã tìm thấy this một.

Với điều đó sang một bên, tôi không thể nói bất cứ điều gì mà không có thêm thông tin. Ứng dụng và cơ sở dữ liệu có đang chạy trên cùng một phần cứng không?

Điều gì là "chuyên sâu" về INSERT?

Tôi khuyên bạn nên lập hồ sơ và nhận được một số dữ liệu thực tế thay vì đoán. Máy tính dựa trên đức tin không bao giờ làm việc cho tôi.

0

Đĩa đang làm chậm ứng dụng của bạn. INSERTS sử dụng đĩa, đĩa chậm, và hệ điều hành cần phải chờ đợi cho các hoạt động viết để kết thúc.

Bạn không thể sử dụng 2 chủ đề, một cho thuật toán và một chủ đề khác cho chèn? Nếu bạn chỉ thực hiện chèn, bạn cũng có thể viết sau đó vào tệp văn bản và thực thi chúng sau này

+0

Giao tiếp đa luồng chậm hơn xếp hàng cập nhật và xóa chúng trong cùng một chuỗi và cũng phức tạp hơn cho các lập trình viên không "sinh ra an toàn thread". – Blaisorblade