Cách giải phóng bộ nhớ mongodb
Được rồi, sau khi lần theo manh mối do loicmathieu và jstell đưa ra, và tìm hiểu thêm một chút, đây là những điều tôi đã tìm ra về MongoDB bằng cách sử dụng công cụ lưu trữ WiredTiger. Tôi đang đặt nó ở đây nếu có ai gặp phải câu hỏi tương tự Show Các luồng sử dụng bộ nhớ mà tôi đã đề cập, tất cả đều thuộc về 2012-2014, tất cả đều có trước WiredTiger và đang mô tả hành vi của công cụ lưu trữ MMAPV1 ban đầu không có bộ đệm riêng hoặc hỗ trợ nén WiredTiger chỉ kiểm soát kích thước bộ nhớ được sử dụng trực tiếp bởi công cụ lưu trữ WiredTiger (không phải tổng bộ nhớ được sử dụng bởi mongod). Nhiều thứ khác có khả năng chiếm bộ nhớ trong cấu hình MongoDB/WiredTiger, chẳng hạn như sau
Xem xét những dữ kiện này, việc dựa vào Các lệnh sau có thể được sử dụng để có được kích thước tập dữ liệu đầy đủ
Kết quả này như sau
Vì vậy, có vẻ như kích thước tập dữ liệu thực tế + các chỉ mục của nó đang chiếm khoảng 68GB bộ nhớ đó Xem xét tất cả những điều này, tôi đoán rằng việc sử dụng bộ nhớ hiện khá được mong đợi, điều tốt là việc giới hạn kích thước bộ đệm WiredTiger hoàn toàn ổn, vì nó xử lý các hoạt động I/O khá hiệu quả (như được mô tả ở trên) Vẫn còn vấn đề về OOM, để khắc phục vấn đề này, vì chúng tôi không có đủ tài nguyên để loại bỏ mongodb, chúng tôi đã hạ thấp oom_score_adj để ngăn OOM tắt các tiến trình quan trọng trong thời điểm hiện tại (Có nghĩa là chúng tôi đã yêu cầu OOM không giết Nếu bạn đặt quá nhiều dữ liệu vào cơ sở dữ liệu MongoDB của mình, nó sẽ khiến máy chủ của bạn hết bộ nhớ. Nó cũng có thể làm điều đó một cách nhanh chóng, nhanh đến mức bạn thậm chí sẽ không thể tắt tiến trình mongo db vì bash shell sẽ không còn phản hồi nữa Giải pháp cho vấn đề này là thêm một nút khác vào cụm của bạn Chúng tôi minh họa giao diện của máy chủ khi hết bộ nhớ bằng cách cố ý thêm nhiều dữ liệu hơn vào máy 8 GB mà nó có thể hỗ trợ, sau đó chạy các truy vấn đối với dữ liệu đó. Sau đó, chúng tôi hiển thị nhật ký trông như thế nào và bạn có thể sử dụng công cụ nào để theo dõi tình huống này Với 215 MB dữ liệu, máy chủ này luôn sử dụng 11% bộ nhớ khi thực hiện nhiều tìm kiếm. Sau đó, chúng tôi đã thêm 3. 5 GB dữ liệu tại thời điểm bị khóa khi đạt mức sử dụng bộ nhớ 92% (Bài viết này là một phần của Hướng dẫn MongoDB của chúng tôi. Sử dụng menu bên phải để điều hướng. ) Khi MongoDB hết bộ nhớ, hãy thêm một nút khácMongoDB không phải là cơ sở dữ liệu trong bộ nhớ. Mặc dù nó có thể được cấu hình để chạy theo cách đó. Nhưng nó sử dụng bộ đệm một cách tự do, nghĩa là các bản ghi dữ liệu được lưu giữ trong bộ nhớ để truy xuất nhanh, trái ngược với trên đĩa MongoDB, trong cấu hình mặc định của nó, sẽ sử dụng sẽ sử dụng dung lượng lớn hơn là 256 MB hoặc ½ của (ram – 1 GB) cho kích thước bộ đệm của nó Bạn có thể giới hạn kích thước bộ đệm MongoDB bằng cách thêm đối số cacheSizeGB vào /etc/mongod. conf tập tin cấu hình, như hình dưới đây. Nhưng MongoDB sử dụng cả bộ đệm bên trong và bộ đệm hệ thống tệp của hệ thống. Nên hạn chế chỗ này sẽ cắt giảm tiêu thụ chỗ khác. Vì vậy, đó không phải là một giải pháp storage: dbPath: /var/lib/mongodb journal: enabled: true wiredTiger: engineConfig: cacheSizeGB: 1 Dịch vụ giám sát miễn phí từ MongoDBBạn nên tận dụng dịch vụ giám sát miễn phí do MongoDB cung cấp. Điều đó được lưu trữ trên trang web của họ, nhưng điều đó không có nghĩa là bạn cần sử dụng dịch vụ đám mây của họ (Atlas). Nó hoạt động với các máy chủ của riêng bạn Để sử dụng, hãy mở vỏ mongo và sau đó dán vào lệnh này db.enableFreeMonitoring() Một phần của trang web của họ trông giống như thế này. Bạn có thể thấy rằng trên máy 8GB này đã hết bộ nhớ. Điều này sẽ khiến MongoDB gửi số liệu thống kê sử dụng đến trang web của họ, nơi họ sẽ theo dõi các trạng thái đó và lưu trữ nó trong một trang web cho bạn. Họ cung cấp cho bạn một URL để theo dõi trang web của bạn. Đó là một URL cố định khi họ chỉ định một ID duy nhất cho bản cài đặt của bạn Hiển thị bộ nhớ Sử dụng MongoDBCác số liệu này bao gồm mức sử dụng cpu, v.v. Ở trên tôi chỉ hiển thị phần bộ nhớ. Đó là
Để kiểm tra bộ đệm hệ thống tệp của bạn, hãy chạy free -k để hiển thị bộ nhớ ảo khả dụng tính bằng kilobyte. Dưới đây là giao diện máy chủ của tôi trong khoảng thời gian 5 phút khi tôi chạy máy hết bộ nhớ. Cột cần lưu ý có sẵn. Chia số được hiển thị cho 1024*1024 để chuyển đổi số này thành gigabyte free -k total used free shared buff/cache available Mem: 8173744 1088440 6753392 9052 331912 6816176 Swap: 0 0 0 total used free shared buff/cache available Mem: 8173744 4654600 2663432 9080 855712 3249520 Swap: 0 0 0 total used free shared buff/cache available Mem: 8173744 7992568 119508 9052 61668 45682 Tất nhiên bạn cũng có thể sử dụng top -p (mongod pid) để theo dõi bộ nhớ. VIRT và RES là bộ nhớ ảo và thường trú. Dưới đây bạn thấy rằng mongod đang sử dụng 91% bộ nhớ của hệ thống trong ví dụ này. Tại thời điểm đó, hệ thống trở nên không phản hồi Bạn cũng có thể lấy số liệu thống kê sử dụng bộ nhớ từ MongoDB trong shell db.serverStatus().mem { "bits" : 64, "resident" : 907, "virtual" : 1897, "supported" : true, "mapped" : 0, "mappedWithJournal" : 0 } Nếu bạn thậm chí đã thực hiện lập trình C hoặc C++, bạn sẽ quen thuộc với malloc. Đó là chức năng hệ thống bạn gọi khi cần dự trữ bộ nhớ cho máy của mình. Khi MongoDB không thể thực hiện được nữa, những cảnh báo này bắt đầu hiển thị trong /var/log/mongodb/mongod. đăng nhập 2019-02-19T03:44:18.738+0000 I COMMAND [ftdc] serverStatus was very slow: { after basic: 202, after asserts: 686, after backgroundFlushing: 890, after connections: 1399, after dur: 1717, after extra_info: 2039, after freeMonitoring: 3003, after globalLock: 3389, after locks: 4073, after logicalSessionRecordCache: 4782, after network: 5520, after opLatencies: 6068, after opcounters: 6477, after opcountersRepl: 6818, after repl: 7441, after security: 7799, after storageEngine: 8616, after tcmalloc: 9676, after transactions: 10081, after transportSecurity: 10412, after wiredTiger: 22733, at end: 24170 } Cho đến khi cuối cùng nó nói 2019-02-19T03:45:17.456+0000 F - [free_mon] out of memory. Bạn cũng có thể đăng nhập vào mongo và lặp lại hai lệnh bên dưới (bạn cần thực hiện cả hai lệnh để cập nhật đầu ra) để xem mức sử dụng bộ nhớ của bạn tăng đột biến khi máy chủ của bạn xuống dốc ________số 8_______Đây là đầu ra. Như bạn có thể thấy nó đã sử dụng hết bộ nhớ khả dụng trên máy 8GB này. Bạn cũng có thể đăng nhập vào mongo và lặp lại hai lệnh bên dưới (bạn cần thực hiện cả hai lệnh để cập nhật đầu ra) để xem mức sử dụng bộ nhớ của bạn tăng đột biến khi máy chủ của bạn xuống dốc Làm cách nào để kiểm tra mức sử dụng bộ nhớ trong MongoDB?Bạn có thể sử dụng các phương pháp sau để xem mức sử dụng bộ nhớ của công cụ. . Chạy db. . Trên trang Bảng điều khiển của một phiên bản trong bảng điều khiển DAS, hãy xem phần trăm dữ liệu bẩn trong bộ đệm WiredTiger. . Sử dụng công cụ mongostat của ApsaraDB cho MongoDB để kiểm tra tỷ lệ dữ liệu bẩn trong WiredTiger cache MongoDB đang sử dụng bao nhiêu bộ nhớ?Và theo mặc định, MongoDB sẽ dự trữ 50% bộ nhớ khả dụng – 1 GB cho bộ đệm WiredTiger hoặc 256 MB, tùy theo giá trị nào lớn hơn . Ví dụ: một hệ thống có 16 GB RAM, sẽ có kích thước bộ đệm WiredTiger là 7. 5 GB.
Bạn có thể chạy MongoDB trongNgoài việc chạy dưới dạng độc lập, các phiên bản mongod sử dụng công cụ lưu trữ trong bộ nhớ có thể chạy như một phần của bộ bản sao hoặc một phần của cụm phân đoạn.
Cái gì ở bên trongCông cụ lưu trữ trong bộ nhớ có sẵn trong MongoDB Enterprise. Thay vì lưu trữ tài liệu trên đĩa, nó lưu trữ chúng trong bộ nhớ để có độ trễ dữ liệu dễ dự đoán hơn . |