Chúng tôi có một phần cứng Android/phần mềm kết hợp mà chúng tôi cài đặt tại các trang web của khách hàng.Android sắp hết bộ nhớ, không có lý do rõ ràng
Trên một số máy tính bảng nhất định, bộ nhớ bắt đầu chạy thấp và Android bắt đầu thực hiện việc này bằng cách tiêu diệt ứng dụng của chúng tôi, sau đó được tự động khởi động lại bởi dịch vụ giám sát của chúng tôi.
Đây là mã chúng tôi sử dụng để giám sát per-app memory usage
:
for(RunningAppProcessInfo info : am.getRunningAppProcesses()) {
int memused = am.getProcessMemoryInfo(
new int[]{info.pid})[0].getTotalPss();
Log.log(DIAG_INFO, "Process Mem: " + info.processName, memused);
}
Đây là mã mà được chúng tôi overall system memory levels
MemoryInfo mi = new MemoryInfo();
am.getMemoryInfo(mi);
long availableMegs = mi.availMem/1048576L;
long threshold = mi.threshold /1048576L;
availableMegs
giọt đến gần threshold
(64mb trong trường hợp của chúng tôi) và android bắt đầu giết chết thứ.
Tuy nhiên, khi chúng tôi xem xét việc sử dụng bộ nhớ trên mỗi quá trình, hãy cộng các giá trị TotalPss
, chúng tôi nhận được tổng số bình thường. Không có quá trình nào ngoài tầm kiểm soát của bộ nhớ!
Bất kỳ ý tưởng nào về RAM bị mất?
Bạn có bất kỳ kết nối mở nào với cơ sở dữ liệu/dịch vụ web của một số loại mà bạn có thể bị thiếu? – ksudu94
Tôi nghĩ rằng tổng giá trị PSS chỉ cung cấp cho bạn việc sử dụng bộ nhớ không gian người dùng (Tất cả các quy trình không gian người dùng có thể truy cập bởi trình quản lý hoạt động). Tổng bộ nhớ là trình điều khiển nhân + trình điều khiển + người dùng. am.getMemoryInfo() nhận thông tin từ/proc/meminfo khá chính xác về tổng dung lượng bộ nhớ hệ thống. Điều gì đó có thể thực sự sai trên các tab đó. chỉ là một ý nghĩ !! – digitizedx
tôi giả định 'getRunningAppProcesses()' có thể không trả về các sử dụng bộ nhớ mức hạt nhân hoặc hệ thống khác. có lẽ chỉ ở cấp ứng dụng/dalvik. – minhaz