Điểm:2

Làm cách nào để tự động di chuyển trao đổi trở lại RAM?

lá cờ cn

Vấn đề ban đầu của tôi với hoán đổi (piness) là nó hoán đổi quá thường xuyên (ngay cả với trao đổi = 1! ).

Tôi cũng nghĩ 0 sẽ tắt tính năng tráo đổi - đó là một quan niệm sai lầm,
Hoán đổi vẫn hoạt động ngay cả khi bạn đặt Sudo sysctl -w vm.swappiness=0 ! :-)
(Để đặt vĩnh viễn, hãy chỉnh sửa /etc/sysctl.conf và thêm/cập nhật vm.swappiness = 0 - đối với trình soạn thảo văn bản GUI, tôi khuyên dùng "linux notepad" "gedit", sau đó bạn có thể làm sudo gedit /etc/sysctl.conf)

Chỉ với trao đổi 0 nó bắt đầu hoạt động giống như người ta mong đợi (hoán đổi bắt đầu khi đầy khoảng 98% RAM), tuy nhiên tôi vẫn gặp một vấn đề nữa - và khi đủ RAM thực sự được giải phóng trở lại, quá trình hoán đổi không tự động quay trở lại RAM, thậm chí không theo thời gian.

Tất nhiên bạn có thể tự làm trao đổi sudo -a; Sudo hoán đổi -a mỗi khi tắt trao đổi, điều này cuối cùng sẽ buộc trao đổi được chuyển ra RAM và sau đó trao đổi được bắt đầu lại.

Tuy nhiên, điều đó không thuận tiện vì 2 lý do a) trao đổi bị tắt trong giây lát b) đó là kiểm tra/chạy thêm thủ công

Có cách nào để đạt được điều này trong một số, tốt nhất là "tự nhiên", đường tự động?

Raffa avatar
lá cờ jp
Để kiểm tra tự động: `[ "$(free | awk '/Swap:/{print $3}')" -lt "$(free | awk '/Mem:/{print $7}')" ] ​​&& echo "Bộ nhớ trống trao đổi nhiều hơn sử dụng" || echo "Bộ nhớ trống ít hơn trao đổi đã sử dụng"`
user535733 avatar
lá cờ cn
Hạt nhân thực sự trả lại các trang hoán đổi được sử dụng thường xuyên trở lại RAM. Nó không nhanh chóng trả lại các trang hiếm khi được sử dụng...bởi vì chúng hiếm khi được sử dụng, vì vậy trao đổi là một vị trí thích hợp cho chúng. Nếu bạn đang sử dụng hệ thống giới hạn RAM, đừng xem hoán đổi chỉ đơn thuần là tràn khi RAM đầy. Xem trao đổi như một dạng bộ nhớ khác với các đặc điểm khác nhau.
heynnema avatar
lá cờ ru
Chỉnh sửa câu hỏi của bạn và cho tôi xem `free -h` và `swapon -s` và `sysctl vm.swappiness`.
jave.web avatar
lá cờ cn
@ user535733 vấn đề là tôi có một số thứ mà tôi có thể không cần ngay lúc này, nhưng tôi cần nó sẵn sàng khi tôi đến đó - hoán đổi thực sự chỉ là một sự phá vỡ an toàn cho tôi (vì vậy tôi có thời gian để tiêu diệt quyền xử lý khi tôi bắt đầu sử dụng quá nhiều GB vào RAM)
Điểm:3
lá cờ cn

Tuy nhiên, không có cài đặt nào khả dụng để thay đổi xu hướng trả lại các trang đã hoán đổi cho RAM. Nếu muốn, bạn có thể làm việc với tập lệnh kiểm tra RAM và SWAP, đồng thời tắt/bật lại tính năng hoán đổi khi thấy an toàn. Trên một hệ thống giới hạn bộ nhớ, điều đó có thể không bao giờ xảy ra: tùy chọn duy nhất để xóa bộ nhớ đã tráo đổi là đóng các tiến trình sở hữu chúng.

Không rõ bạn sẽ được lợi gì khi ngay lập tức chuyển SWAP trở lại RAM bất cứ khi nào có thể. Linux tự động quản lý trao đổi. Nếu nó không giải phóng vùng hoán đổi bị chiếm dụng, đó là do bộ nhớ đã hoán đổi đó không cần thiết và do đó có thể vui vẻ ở lại trên đĩa cho đến khi cần. Bằng cách này, thời gian ram và bộ xử lý được tiết kiệm để sử dụng các ứng dụng cần thiết. Đĩa của bạn không bị ảnh hưởng trong đó các hoạt động trao đổi được giảm thiểu.

Hoán đổi bắt đầu nhanh như thế nào tùy thuộc vào bạn dễ thay đổi mà còn phụ thuộc vào dung lượng RAM bạn có. Bạn đã không đề cập đến dung lượng RAM bạn có. Dựa trên kinh nghiệm của bạn, người ta có thể cho rằng bạn có ít RAM (có thể là 2 GB trở xuống) hoặc bạn đang sử dụng các ứng dụng cụ thể có nhu cầu bộ nhớ bất thường.

Trong trường hợp đầu tiên, bạn có thể cần phải thay đổi thói quen sử dụng máy tính của mình để giải quyết những hạn chế của RAM thấp, cho đến khi bạn có thể nâng cấp RAM vật lý. Hoán đổi hoàn toàn không phải là sự thay thế RAM, nó chỉ là một mẹo để mở rộng phần nào và cho phép nhiều hơn một chút trên hệ thống giới hạn RAM.

Trong trường hợp thứ hai, hãy để nó yên: hệ thống của bạn hoạt động tối ưu, hoán đổi RAM không sử dụng để làm cho bộ nhớ của bạn hoạt động.

jave.web avatar
lá cờ cn
vấn đề là tôi có một số thứ mà tôi có thể không cần ngay lúc này, nhưng tôi cần nó sẵn sàng khi tôi đến đó - trao đổi thực sự chỉ là một sự phá vỡ an toàn tràn đối với tôi, vì vậy tôi có thời gian để giết đúng quy trình khi Tôi bắt đầu sử dụng quá nhiều GB vào RAM, đây là điều thường xuyên xảy ra hoặc thậm chí tôi phải thực hiện khá thường xuyên. (và tôi sẽ không gọi đó là một mánh khóe) BTW: Tôi cảm thấy như chỉ có đoạn cuối mới thực sự trả lời câu hỏi. Ngoài ra, tôi thấy xu hướng trao đổi câu trả lời này tránh được điều không thể tránh khỏi - có một vấn đề cần giải pháp (có thể chưa có, nhưng vấn đề vẫn còn). :-)
vanadium avatar
lá cờ cn
Phần đầu tiên là gợi ý rằng những gì bạn cho là vấn đề có thể không phải là vấn đề. Cuối cùng, điểm mấu chốt là: mua đủ RAM cho nhu cầu của bạn. Không có cách tiếp cận nào khác sẽ thực sự giúp bạn. Bạn có thực sự thêm một số thông tin về dung lượng RAM mà bạn đang gặp khó khăn không? Tôi thấy rằng trong thời gian chờ đợi, ai đó đã đủ tử tế để viết kịch bản cho bạn mà tôi đã đề cập.
vanadium avatar
lá cờ cn
Đã chuyển "câu trả lời" lên đầu;)
jave.web avatar
lá cờ cn
Đó là một xu hướng khác mà tôi không thích - "mua X", tôi nghĩ đó là điều hiển nhiên (tôi xin lỗi nếu không phải vậy), nếu tôi có thể mua/nâng cấp lên đủ RAM, tôi sẽ không hỏi điều này. Tôi rất tiếc không cung cấp thông tin RAM - có 2 trường hợp - 16GB & 32GB. Đừng hiểu sai ý tôi, tôi thực sự rất vui vì bạn sẵn sàng giúp đỡ :) chỉ hơi thất vọng về cách tiếp cận của Internet đối với những người cần giải pháp cho tình hình hiện tại của họ
jave.web avatar
lá cờ cn
Dù sao đi nữa, đối với trường hợp của tôi nói riêng, việc nâng cấp RAM sẽ không phải là một lựa chọn vì nó không có các hậu quả **hành vi** tương tự (như tôi đã mô tả trong nhận xét đầu tiên của mình) và tình trạng quá tải RAM mà tôi gặp phải khi trao đổi có thể **hầu như không giới hạn** :)
vanadium avatar
lá cờ cn
Tôi hiểu nhu cầu của bạn, nhưng không hiểu "tại sao" nhu cầu của bạn và câu hỏi của bạn không làm rõ điều đó vì bạn hầu như không ghi lại trường hợp sử dụng cụ thể có thể dẫn đến tình huống của bạn. Trừ khi ai đó nghĩ ra cách tốt hơn, như hiện tại, bạn cần tự mình triển khai một tập lệnh như tôi đã chỉ ra trong câu trả lời này. Tôi thấy rằng bạn đồng thời chấp nhận câu trả lời của người cung cấp kịch bản.
jave.web avatar
lá cờ cn
Mặc dù tôi chưa ghi lại trường hợp sử dụng, nhưng tôi nghĩ rằng tôi đã mô tả khá rõ ràng nhu cầu và những việc tôi đang làm, điều đó có nghĩa là tôi đã trải qua phần Hỏi & Đáp thông thường nên tôi thấy phần lớn câu trả lời của bạn nằm ngoài chủ đề - là rõ ràng - đó là lý do tại sao tôi không chấp nhận nó, **không** vì thiếu mã. Nhưng nếu bạn quan tâm - trường hợp sử dụng chung là rò rỉ bộ nhớ ngẫu nhiên/rác bộ nhớ cache được tạo bởi các ứng dụng mà tôi không thể kiểm soát được nhưng thỉnh thoảng chúng vẫn xảy ra và khi tôi cố tình tạo nội dung sử dụng bộ nhớ RAM nhưng với dữ liệu có thể chứa những điều không thể đoán trước :)
jave.web avatar
lá cờ cn
Tuy nhiên, cảm ơn bạn đã đóng góp ý kiến, tôi không muốn nghe có vẻ vô ơn :)
Điểm:1
lá cờ jp

Nếu bạn phải làm điều đó, sau đó trao đổi là con đường để đi. Bạn có thể tự động hóa quy trình này bằng cách triển khai tập lệnh bash như sau:

#!/bin/bash

sysctl -w vm.swappiness=0

trong khi đúng
làm
    total_m=$(free | awk '/Mem:/{print $2}')
    free_m=$(free | awk '/Mem:/{print $7}') 
    used_s=$(free | awk '/Swap:/{print $3}')
    total_m_percent=$(("$total_m" / 100))
    free_m_percent=$(("$free_m" / "$total_m_percent"))
    # Hủy kích hoạt trao đổi và di chuyển các trang sang RAM nếu có đủ chỗ trong RAM và RAM trống hơn 30%
    [ "$used_s" -gt 0 ] && [ "$used_s" -lt "$free_m" ] && [ "$free_m_percent" -gt 30 ] && hoán đổi -a
    # Kích hoạt trao đổi nếu RAM trống còn lại dưới 5%
    [ "$used_s" -eq 0 ] && [ "$free_m_percent" -lt 5 ] && hoán đổi -a
    # Ngủ trong 10 giây để tránh làm căng hệ thống
    ngủ 10
xong

Chạy tập lệnh với sudo bash scriptfile.sh hoặc thêm một hệ thống dịch vụ để tự động chạy tập lệnh khi hệ thống khởi động.

jave.web avatar
lá cờ cn
Có vẻ thú vị - vì vậy không có cách nào để di chuyển những thứ đã hoán đổi mà không cần hoán đổi? :(
Raffa avatar
lá cờ jp
@jave.web [Quản lý bộ nhớ](https://www.kernel.org/doc/html/latest/admin-guide/mm/index.html) rất phức tạp và quan trọng đối với hệ thống ⦠Nhân Linux đang chiếm quan tâm đến điều đó thật tốt... Vì vậy, điều khôn ngoan nên làm là chỉ `hoán đổi` và để điều kỳ diệu xảy ra :) ⦠âcó cách nào khác không?â Chắc chắn rồi... cách â Tôi nghi ngờ điều đó ⦠Tập lệnh trong câu trả lời của tôi được xây dựng đặc biệt để giải quyết yêu cầu của bạn và tập lệnh này sẽ chạy hoàn hảo dưới dạng dịch vụ `systemd`.
muru avatar
lá cờ us
Đánh giá mã: khi chỉ định thay thế lệnh cho một biến (`var=$(foo)`), không cần thiết phải trích dẫn xung quanh thay thế lệnh (nhưng chúng không ảnh hưởng gì). Nhưng khi sử dụng một biến trong một lệnh, `[ "$used_s" ...]` biến sẽ được trích dẫn.
Raffa avatar
lá cờ jp
@muru Cảm ơn bạn đã xem xét mã của mình, tôi hoàn toàn đồng ý với bạn về khái niệm thực hành tốt... Tuy nhiên, chỉ các giá trị số mới được mong đợi trong các biến đó nên không cần trích dẫn xung quanh các biến đó (nhưng chúng không ảnh hưởng gì). .. Tôi thấy mối quan tâm của bạn về `$used_s` nhưng ngay cả khi hoán đổi bị hủy kích hoạt, biến này sẽ chứa giá trị số của `0` ... Tuy nhiên, ý kiến ​​của bạn về vấn đề này có trọng lượng nặng hơn ở phía bên phải :)
Raffa avatar
lá cờ jp
@muru Tôi đã phải chỉnh sửa và thêm `[ "$used_s" -gt 0 ]` và `[ "$used_s" -eq 0 ]` để ngăn việc ban hành các lệnh `swapoff` / `swapon` một cách không cần thiết ... Tôi cũng đã tìm thấy đây là cơ hội để giải quyết công việc kinh doanh báo giá trên đường đi :) ... Đánh giá cao ý kiến ​​​​của bạn và cảm ơn một lần nữa.
jave.web avatar
lá cờ cn
@Raffa Tôi chỉ tự hỏi liệu kernel có thể chuyển nội dung từ RAM sang trao đổi hay không nếu nó có thể thực hiện theo cách khác theo một cách nào đó trong khi vẫn duy trì trao đổi trong trường hợp một bộ nhớ khổng lồ khác bắt đầu được phân bổ :)

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.