Cent OS: Làm cách nào để tắt hoặc giảm bộ nhớ quá mức và có an toàn không?


20

Thỉnh thoảng máy chủ "của tôi" bị treo vì nó hết dung lượng bộ nhớ và trao đổi. (nó tiếp tục phản hồi ping nhưng không có gì hơn thế, thậm chí không phải là ssh).

Tôi đã nói với linux rằng việc xử lý bộ nhớ quá mức, theo như tôi hiểu là giống như các ngân hàng làm với tiền: nó cấp cho các bộ xử lý nhiều bộ nhớ hơn thực tế có sẵn, giả sử rằng hầu hết các quy trình sẽ không thực sự sử dụng tất cả bộ nhớ mà chúng yêu cầu, tại ít nhất không phải tất cả cùng một lúc.

Vui lòng cho rằng đây thực sự là nguyên nhân khiến hệ thống của tôi thỉnh thoảng bị treo, chúng ta không thảo luận ở đây liệu đây có phải là trường hợp hay không (xem Điều gì có thể khiến TẤT CẢ các dịch vụ trên máy chủ bị hỏng, nhưng vẫn phản hồi ping? Và làm thế nào để tìm ra ) .

Vì thế,

  1. Làm cách nào để vô hiệu hóa hoặc giảm đáng kể tình trạng thừa bộ nhớ trong CentOS? Tôi đã đọc có hai cài đặt được gọi là vm.overcommit_memory (giá trị 0, 1 hoặc 2) và vm.overcommit_ratiom nhưng tôi không biết mình phải tìm và thay đổi chúng ở đâu (hy vọng một số tệp cấu hình) và liệu tôi có cần khởi động lại máy chủ để thay đổi có hiệu quả hay không.

  2. và nó có an toàn không? Tôi có thể mong đợi những tác dụng phụ nào? Khi googling cho overcommit_memory tôi thấy những điều đáng sợ như mọi người nói rằng máy chủ của họ không thể khởi động được nữa ....

Vì nguyên nhân gây ra sự gia tăng đột ngột trong việc sử dụng bộ nhớ là mysql do các truy vấn được tạo bởi php mà lần lượt được gọi trong khi phục vụ các yêu cầu http, nên tôi chỉ mong một số tập lệnh php không hoàn thành và do đó thỉnh thoảng có 500 phản hồi máy chủ quá bận rộn, đó là một rủi ro tôi có thể gặp phải (chắc chắn tốt hơn là toàn bộ máy chủ không thể truy cập được và phải khó khởi động lại nó).

Hoặc nó thực sự có thể khiến máy chủ của tôi không thể khởi động lại nếu tôi chọn cài đặt sai?


1
Vô hiệu hóa overcommit sẽ không giúp bạn khi bạn thực sự hết bộ nhớ. Thêm RAM vào máy chủ có thể giúp đỡ, mặc dù.
Michael Hampton

2
Vô hiệu hóa overcommit sẽ không phải là giải pháp cuối cùng nhưng IS sẽ giúp ích rất nhiều, nếu bất cứ khi nào máy chủ hết bộ nhớ (chỉ một lần trong một vài giây) tôi chỉ bị từ chối một vài yêu cầu http (hoặc phục vụ kém), thay vì máy chủ của tôi DIE hoàn toàn và mãi mãi (cho đến khi tôi khởi động lại nó)
matteo

Câu trả lời:


30

Bộ nhớ thừa có thể bị vô hiệu hóa bởi vm.overcommit_memory=2

0 là chế độ mặc định, trong đó kernel xác định phân bổ bằng cách tính toán bộ nhớ trống so với yêu cầu phân bổ được thực hiện. Và đặt nó thành 1 cho phép chế độ thuật sĩ, trong đó kernel luôn quảng cáo rằng nó có đủ bộ nhớ trống cho bất kỳ phân bổ nào. Đặt thành 2, có nghĩa là các quy trình chỉ có thể phân bổ tối đa một lượng cấu hình ( overcommit_ratio) RAM và sẽ bắt đầu bị lỗi phân bổ hoặc thông báo OOM khi vượt quá số tiền đó.

Có an toàn để làm như vậy, không. Tôi chưa thấy trường hợp sử dụng hợp lý nào trong đó việc vô hiệu hóa bộ nhớ quá mức thực sự có ích, trừ khi bạn chắc chắn 100% về khối lượng công việc và dung lượng phần cứng. Trong trường hợp bạn quan tâm, hãy cài đặt kernel-docsgói và đi đến /Documentation/sysctl/vm.txtđể đọc thêm hoặc đọc trực tuyến .

Nếu bạn đặt vm.overcommit_memory=2thì nó sẽ vượt quá tỷ lệ phần trăm của RAM vật lý được cấu hình trong vm.overcommit_ratio(mặc định là 50%).

echo 0/1/2 > /proc/sys/vm/overcommit_memory 

Điều này sẽ không tồn tại một khởi động lại. Để kiên trì, hãy đặt nó trong /etc/sysctl.conftập tin:

vm.overcommit_memory=X

và chạy sysctl -p. Không cần phải khởi động lại.


phần bạn đã không trả lời là trong đó tập tin tôi thay đổi điều đó thiết lập vm.memory_overcommit và đặc biệt là liệu tôi có cần phải khởi động lại (hoặc những gì khác) để có nó có hiệu lực
matteo

2
echo 0/1/2> / Proc / sys / vm / overcommit_memory Điều này sẽ không tồn tại khi khởi động lại. Để duy trì, hãy đặt tệp này trong tập tin /etc/sysctl.conf vm.overcommit_memory = X và chạy sysctl -p. Không cần phải khởi động lại
Soham Chakraborty

Cảm ơn rất nhiều. Bạn có thể vui lòng thêm phần này vào phần câu trả lời để tôi có thể chính thức "chấp nhận" nó không.
matteo

1
Đã thêm phần mới.
Soham Chakraborty

4
"overcommit_ratio" có tác dụng quan trọng khi sử dụng overcommit_memory = 2 - nó xác định tỷ lệ phần trăm của RAM vật lý được phép phân bổ! Vì vậy, nếu tỷ lệ <100 thì bạn sẽ để lại một số RAM chưa được phân bổ, có thể cho bộ đệm đĩa hoặc tương tự. Tỷ lệ mặc định là 50%, vì vậy bạn sẽ chỉ sử dụng 50% RAM vật lý nếu bạn không thay đổi điều này!
David Gardner

6

Tuyên bố hoàn toàn không đủ tiêu chuẩn: Vô hiệu hóa bộ nhớ quá mức chắc chắn là "an toàn" hơn so với việc kích hoạt nó.

$ khách hàng đã đặt nó trên một vài trăm máy chủ web và nó đã giúp giải quyết vấn đề ổn định rất nhiều. Thậm chí còn có một kiểm tra Nagios gọi lửa thật to nếu nó KHÔNG bị vô hiệu hóa.

Mặt khác, mọi người có thể không coi đó là "an toàn" khi các quy trình của họ bị mất bộ nhớ khi họ chỉ muốn quá tải một chút ram và sẽ không bao giờ thực sự sử dụng nó. (tức là SAP sẽ là một ví dụ rất hay)

Vì vậy, bạn quay lại để xem nếu nó cải thiện mọi thứ cho bạn. Vì bạn đã xem xét nó để loại bỏ các vấn đề liên quan - tôi nghĩ nó có thể giúp ích cho bạn.

(Tôi biết tôi sẽ mạo hiểm với một người khó chịu)


3

Tôi đồng ý rằng việc vô hiệu hóa overcommit sẽ an toàn hơn so với việc kích hoạt nó trong một số trường hợp. Nếu máy chủ chỉ chạy một số công việc bộ nhớ lớn (như mô phỏng mạch trong trường hợp của tôi), thì việc từ chối ứng dụng yêu cầu bộ nhớ trả trước sẽ an toàn hơn thay vì chờ đợi một sự kiện OOM (chắc chắn sẽ theo dõi ngay) có vấn đề sau khi kẻ giết người OOM đã hoàn thành công việc của mình.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.