Phát hành không gian trao đổi


10

Đôi khi, kernel dường như có ý định giữ firefox trong trao đổi, mặc dù có đủ bộ nhớ vật lý và tôi đang sử dụng firefox:

robert@rm:~> free -m
             total       used       free     shared    buffers     cached
Mem:          3009       1904       1104          0        109        679
-/+ buffers/cache:       1116       1892
Swap:         4102        885       3216

Có một lệnh để hướng dẫn kernel bỏ không gian trao đổi và sử dụng bộ nhớ trống có sẵn không?


Cập nhật : mặc dù trong thời gian ngắn tôi đã sử dụng hoán đổi / hoán đổi, giờ tôi đã đặt

sudo sysctl vm.swappiness=30

như đề xuất trong một phản ứng khác, và nhận được kết quả rất tốt.

Câu trả lời:


2

Bạn có thể làm mộtswapoff - sẽ cần quyền root,
nhưng, tôi đoán đó không phải là vấn đề với bạn.


15

Bạn có thể làm những gì Nik đề xuất và sử dụng swapoff . Tuy nhiên, có một cách khác, thanh lịch hơn để tinh chỉnh "swappiness", hoặc cách nhân mạnh mẽ hoán đổi các chương trình ra đĩa trong các hệ thống chạy kernel 2.6.

Đã có những cuộc tranh luận sôi nổi về danh sách gửi thư của kernel linux về chính sách mà kernel nên tuân theo liên quan đến hành vi tráo đổi . Kết quả cuối cùng là bây giờ chúng ta có một bản vá trong 2,6 hạt nhân cho phép chúng ta điều chỉnh hành vi này đến một mức độ lớn.

Lưu ý rằng bạn cần quyền root để thực hiện việc này, vì bạn sẽ chạy các lệnh hoán đổi / hoán đổi.

Giá trị hiện tại của "swappiness" có thể được kiểm tra trong tệp / Proc / sys / vm / swappiness hoặc bằng cách chạy lệnh sysctl này :

sudo sysctl vm.swappiness

Các giá trị "swappiness" có thể dao động từ 0 (không trao đổi) đến 100 (trao đổi vào đĩa càng nhiều càng tốt). Ubuntu xuất xưởng với khả năng trao đổi mặc định được đặt thành 60.

Để thay đổi điều này cho một phiên, hãy gọi lại sysctl và chuyển cho nó một giá trị swappiness để sử dụng:

sudo sysctl vm.swappiness=30

Bên cạnh miễn phí , tất nhiên bạn có thể theo dõi các hiệu ứng của việc này thông qua các tiện ích htop hoặc iotop tuyệt vời .

Nếu bạn thích những gì bạn thấy và muốn giữ lại giá trị này trong quá trình khởi động lại, chỉ cần đặt "vm.swappiness = 30" trong tệp /etc/sysctl.conf .

$ sudo sysctl vm.swappiness
vm.swappiness = 30
$ sudo sysctl vm.swappiness=40
vm.swappiness = 40
$ sudo sysctl vm.swappiness
vm.swappiness = 40
$ sudo tail /etc/sysctl.conf 
#net.ipv4.conf.all.accept_source_route = 0
#net.ipv6.conf.all.accept_source_route = 0
#
# Log Martian Packets
#net.ipv4.conf.all.log_martians = 1
#
# The contents of /proc/<pid>/maps and smaps files are only visible to 
# readers that are allowed to ptrace() the process
# kernel.maps_protect = 1
vm.swappiness=30

Bạn có thể chơi với các giá trị khác nhau cho đến khi bạn tìm thấy một giá trị có thể thay đổi ở mức chấp nhận được trên máy của bạn.


+1 cho sysctl. Khi thử nghiệm các giá trị khác nhau của swappiness, bạn có thể ghi trực tiếp vào tệp Proc (echo "30"> / Proc / sys / vm / swappiness). Những thay đổi này là tạm thời và sẽ không ghi vào /etc/sysctl.conf. Khi bạn hài lòng với cài đặt, sau đó sử dụng sysctl để thực hiện thay đổi 'vĩnh viễn'.
Shawn Chin

6

Hãy nhớ rằng những thứ trong trao đổi đã được đặt ở đó vào thời điểm bận rộn hơn bây giờ.

Bạn cũng có thể thấy rằng dữ liệu cũng nằm trong RAM - đã được tải trở lại để sử dụng nhưng không bị xóa khỏi trao đổi. Nhân làm điều này để tiết kiệm thời gian trong giai đoạn bận rộn tiếp theo - nếu dữ liệu đã được sao chép ở đó, nó chỉ có thể giải phóng RAM mà nó đang sử dụng thay vì phải ghi đĩa trước. Vì vậy, trừ khi bạn biết rằng máy sẽ không cần phải trao đổi một lần nữa trong tương lai gần, buộc việc giải phóng không gian hoán đổi có thể không đạt được gì ngoại trừ việc làm chậm lại một chút trong lần hoán đổi tiếp theo là cần thiết.

Điều này được quản lý trên cơ sở xóa khi ghi, vì vậy nếu bản sao trong RAM được cập nhật, các khối trong trao đổi sẽ được phát hành.

Nếu không gian hoán đổi là cần thiết cho một thứ khác, mà nó sẽ không có sẵn tại thời điểm này vì bạn có nhiều miễn phí, tất nhiên nó sẽ được phát hành cho mục đích sử dụng đó.

Bạn không thể thấy có bao nhiêu dữ liệu ở trạng thái này (cả hai trong các trang dựa trên đĩa trong vùng trao đổi và RAM) trong đầu ra từ free. Bạn có thể nhìn thấy nó thông qua /prochệ thống tập tin đặc biệt mặc dù. Nhìn vào sản lượng cat /proc/meminfocho SwapCachedđếm.

Hai lý do khác để có sự hoán đổi sử dụng khi có bộ nhớ dự phòng rõ ràng là

  • khi tải I / O nặng, hạt nhân đã quyết định rằng các trang không được sử dụng lâu đời sẽ được tráo đổi tốt hơn để nó có thể sử dụng RAM cho bộ đệm / bộ đệm, mặc dù nhìn vào freeđầu ra của bạn có lẽ không phải là trường hợp như bạn có một khối RAM thực sự chưa được phân bổ cũng như được sử dụng bởi bộ đệm / bộ đệm IO.
  • các trang đã bị tráo đổi vì một số lý do trước đó và không cần thiết nữa vì có lẽ đó là bộ nhớ được sử dụng bởi một quá trình không hoạt động trong một thời gian. Trong trường hợp này, việc giải phóng trao đổi (để tải các trang trở lại vào RAM) có thể cải thiện thời gian phản hồi của quá trình đó vào lần tới, cần phải làm gì đó ngoài giấc ngủ, nhưng nếu đã không hoạt động trong một thời gian thì có thể không cần thiết bất cứ lúc nào trong tương lai gần

1
+1 cho một lời giải thích tuyệt vời. FYI, vmstat cho phép bạn xem dữ liệu / Proc / meminfo thông qua không phải tất cả dữ liệu.

1

Hãy nhớ rằng đó freechỉ là một ảnh chụp nhanh của việc sử dụng bộ nhớ. Kết quả mà bạn đang thấy có thể ngụ ý rằng, tại một số thời điểm trong quá khứ, hệ thống đã bị thiếu RAM nên vật liệu cư trú RAM bị tráo đổi. Kể từ đó, RAM đã trở nên miễn phí nhưng vật liệu trao đổi không được yêu cầu nên vẫn được giữ trên trao đổi thay vì chỉ làm lộn xộn RAM. Nếu đó là trường hợp, tắt trao đổi sẽ là một ý tưởng tồi. Có quá trình nào có thể yêu cầu một lượng RAM lớn như vậy kể từ lần tải lại cuối cùng không?

Ngoài ra, bạn có thể muốn kiểm tra xem bạn không có giới hạn về kích thước cư trú tối đa được đặt qua ulimit (thường là trong / etc / profile nhưng có thể thay đổi theo phân phối và có thể được đặt theo từng quy trình (ví dụ: trong tập lệnh khởi chạy) ).

Cuối cùng, trên Microsoft Windows, có các báo cáo về các vấn đề cụ thể với Firefox bị tráo đổi sang đĩa, ví dụ như khi được thu nhỏ (ví dụ: http://joispiraad.com/mozilla-firefox/control-your-firefox-ram-usage/113 ). Tôi chưa từng nghe về điều đó trên các hệ thống GNU / Linux nhưng nó có thể đáng để khám phá.


Cảm ơn câu trả lời. Vấn đề của tôi không phải là trao đổi đang được sử dụng, mà giờ đây nó được sử dụng cho các chương trình đang hoạt động, ví dụ Firefox và Thunderbird, cảm thấy chậm chạp. Một hoán đổi / hoán đổi làm cho họ cảm thấy linh hoạt một lần nữa.
Robert Munteanu
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.