Làm thế nào để quản lý việc sử dụng Swap trong Linux
Bạn có thể đã gặp phải sự cố hệ thống, sử dụng trao đổi nặng hoặc các sự cố bộ nhớ thấp trong hệ thống Linux của bạn. Một lời khuyên thông thường là "giảm giá trị swappiness", giảm việc sử dụng trao đổi. nhưng những gì là swappiness? Và nó thực sự tốt để tinh chỉnh nó?
Lưu ý : chúng tôi sẽ không đi sâu vào chi tiết về phân vùng trao đổi. Bạn có thể đọc tất cả về nó trong bài viết của chúng tôi về những gì bạn cần biết về phân vùng Swap trên Linux.
Swappiness
Có một giá trị được gọi là swappiness trong các hệ thống giống UNIX xác định cách các trang trong bộ nhớ sẽ được xử lý. Giá trị mặc định của nó trên hầu hết các hệ thống là “60”, nhưng nó có thể được đặt ở bất kỳ thứ gì từ 0 đến 100. Nếu bộ nhớ yếu, kernel sẽ loại bỏ một số bộ nhớ cache để có thêm RAM miễn phí cho các quá trình hoặc nó sẽ trao đổi một số quá trình các trang từ RAM đến đĩa.
Giá trị mặc định là 60 có nghĩa là hoán đổi sẽ được sử dụng ít hơn, và bộ đệm I / O sẽ có nhiều khả năng được giải phóng để tái phân bổ RAM. Các kho lưu trữ được coi là "rẻ hơn" (ít tài nguyên hơn), trong khi hoán đổi các trang bao gồm đọc và ghi đĩa, khiến chúng trở nên “đắt tiền hơn.” Với giá trị '60 ', việc sử dụng trao đổi sẽ thấp hơn một chút so với sử dụng lại bộ đệm. Nếu giá trị của swappiness được tăng lên 100, hoán đổi và lưu trữ bộ nhớ cache sẽ được sử dụng với trọng lượng bằng nhau. Điều này có nghĩa là trao đổi I / O nhanh hơn và nhanh hơn mặc định. Giá trị thấp hơn như “10” có nghĩa là trao đổi sẽ được sử dụng ít hơn nhiều, và lưu trữ I / O có thể được sớm hơn nhiều đuổi ra ủng hộ các quy trình. Điều này có thể làm tăng tương tác nhưng cũng có thể làm tổn thương tốc độ I / O.
Giảm swappiness
Bạn sẽ thường thấy những lời khuyên trên các trang web và diễn đàn để giảm sự thay đổi đến khoảng "10." Điều này được cho là để tăng tốc độ bằng cách sử dụng ít trao đổi và giữ nhiều quy trình hơn trong RAM vật lý. Logic này có thể hơi đơn giản và có thể không phải là "một kích thước phù hợp với mọi giải pháp."
Giảm giá trị của swappiness có thể là tốt trong các kịch bản sau đây:
- Đối với các hệ thống cơ sở dữ liệu, hoặc nếu bạn sử dụng rất nhiều ứng dụng cơ sở dữ liệu chuyên sâu : Cơ sở dữ liệu thường xử lý tệp bộ nhớ đệm theo cách tốt hơn hệ điều hành. Nếu bạn giảm swappiness, bạn sẽ hạn chế bộ nhớ đệm của hệ điều hành, do đó tạo cơ hội cho cơ sở dữ liệu xử lý cache của chính nó.
- Đối với tương tác : Nếu bạn đa nhiệm nhiều nhưng xử lý vài tệp hoặc không mở tài liệu lớn, điều này có thể cải thiện mức độ mượt mà hệ thống của bạn sẽ cảm thấy. Các quy trình ít hơn sẽ được ghi ra đĩa và khi truy cập RAM nhanh hơn nhiều, máy tính của bạn có thể cảm thấy nhanh hơn. Bạn cũng phải nhớ rằng điều này có thể làm giảm hiệu năng I / O. Nếu bạn có đĩa chậm hoặc làm bất cứ điều gì I / O chuyên sâu, nó thậm chí có thể làm tổn thương hiệu suất.
- Đối với giả dược : Nhiều người tin rằng một swappiness thấp hơn sẽ tăng tốc độ hệ thống, . Nghiêm túc, bạn nghĩ rằng hệ thống của bạn là nhanh hơn, nó có thể có hiệu quả của việc cảm nhận nó để được nhanh hơn, quá.
Hãy ghi nhớ rằng việc giảm sự thay đổi có thể dẫn đến các sự cố và các quá trình bị hệ thống giết chết một cách ngẫu nhiên để giải phóng bộ nhớ. Giảm swappiness sẽ là tốt nhất nếu bạn có đủ RAM có sẵn để chạy hệ thống của bạn trơn tru. Nhưng bạn nên giữ giá trị ở trên "10", vì một số sử dụng trao đổi là tốt để có.
Tăng swappiness
Tăng swappiness có thể có lợi thế chung của đẩy nhanh I / O. Mặc dù không thường xuyên được khuyên, việc tăng sự thay đổi có thể hữu ích nếu:
- Bạn thực hiện một số hoạt động chuyên sâu I / O và bạn có các ổ cứng cũ, chậm . Ví dụ: thực hiện sao lưu hoặc chỉnh sửa hàng loạt hình ảnh có thể được I / O chuyên sâu (Một ngoại lệ đáng chú ý là cơ sở dữ liệu được tự nhiên I / O chuyên sâu nhưng có thể được hưởng lợi từ một giá trị swappiness thấp hơn như đã thấy ở trên.).
- Bạn có bộ nhớ thấp nhưng có đĩa tương đối nhanh. Trong trường hợp không chắc này, giá trị cao hơn của swappiness có thể giúp xử lý bộ nhớ hiệu quả hơn (mặc dù thiết lập nó quá cao có thể lại làm tổn thương hiệu suất.).
Làm thế nào để quản lý swappiness
Đầu tiên, bạn nên cân nhắc xem liệu bạn có cần chạm vào giá trị này không. Bạn có gặp phải sự cố về hiệu suất không? Và quan trọng hơn, bạn đã thử các tinh chỉnh hệ thống khác chưa? Nếu không, nó có lẽ là tốt nhất để tìm nơi khác đầu tiên. Nhưng nếu bạn có một kịch bản cụ thể trong tâm trí, bạn có thể muốn tiếp tục.
Tiếp theo, mức độ sử dụng swap của bạn nặng đến mức nào? Bạn có thể tìm thấy nó với bất kỳ công cụ giám sát hiệu suất nào do bạn lựa chọn hoặc với lệnh free
. free -m
sẽ cung cấp cho bạn ảnh chụp nhanh về mức sử dụng bộ nhớ tính bằng megabyte. Để theo dõi liên tục, bạn có thể muốn sử dụng watch.
xem -n 1 miễn phí -m
Điều này sẽ chạy lệnh free -m
mỗi giây và in đầu ra của nó cho đến khi bạn nhấn “Ctrl + C.”
Như bạn thấy ở trên, rất ít trao đổi đang được sử dụng bởi hệ thống bài viết này được viết trên.
Bây giờ nếu bạn có kinh nghiệm hoán đổi, bạn có thể quan tâm bao nhiêu nó đang hoạt động. Lệnh vmstat
sẽ cho bạn biết tất cả những gì bạn cần biết về cách sử dụng bộ nhớ ảo của hệ thống (hoán đổi và ram vật lý cùng nhau).
vmstat 1
Bạn cần kiểm tra cột swap
trong đó si
có nghĩa là "hoán đổi", và có nghĩa là "hoán đổi". Nếu các con số cao, nó có nghĩa là rất nhiều hoạt động hoán đổi mà là một chỉ báo của các vấn đề bộ nhớ thấp. Nếu bạn thấy việc sử dụng trao đổi bằng cách hoán đổi hoạt động free
nhưng ít hoạt động, thì việc hoán đổi tinh chỉnh có thể là do.
Nó cũng là một ý tưởng tốt để thiết lập các tiêu chuẩn hiệu suất khác như đĩa I / O, tải trung bình, vv, vì vậy khi bạn kiểm tra các giá trị swappiness mới của bạn, bạn có cái gì đó để so sánh.
Để kiểm tra một giá trị swappiness khác, bạn có thể thiết lập nó tạm thời với lệnh sysctl
. Điều này không cần khởi động lại, và hiệu quả là ngay lập tức. Trong thực tế, việc khởi động lại sẽ khôi phục giá trị mặc định, vì vậy bạn khá an toàn để thử nghiệm:
sudo sysctl vm.swappiness = 10
Tất nhiên, bạn có thể đặt bất kỳ giá trị nào thay vì “10” (giữa “0” và “100”).
Khi bạn đã tìm thấy giá trị ưa thích của mình, bạn có thể thay đổi vĩnh viễn cấu hình hệ thống bằng cách chỉnh sửa “/etc/sysctl.conf”
sudo nano /etc/sysctl.conf
và thêm các dòng
# Đặt giá trị swappiness vm.swappiness = 10
đến cuối tập tin này, với giá trị được đặt lại cho sở thích của bạn một lần nữa, tất nhiên.
Phần kết luận
Giảm swappiness để "10" thường được khuyến cáo như là một một kích thước phù hợp với tất cả các giải pháp, nhưng việc sử dụng thực tế của kỹ thuật này có thể là một chút phức tạp hơn. Bằng cách thiết lập điểm chuẩn, biết hệ thống của bạn, cách bạn sử dụng nó và những gì bạn cần từ nó, bạn có thể tinh chỉnh việc sử dụng trao đổi và đạt được hiệu suất (tương tác hoặc I / O).