Bộ nhớ trao đổi là gì?


26

Tôi đang sử dụng RAM để lưu trữ một số bảng cơ sở dữ liệu của mình và các bảng khác được lưu trữ trong đĩa cứng.

Hôm nay tôi đã biết rằng các quy trình của tôi đang sử dụng bộ nhớ trao đổi. Bây giờ bộ nhớ hoán đổi là gì và làm cách nào tôi có thể phát hiện quá trình nào đang sử dụng bộ nhớ trao đổi và làm cách nào tôi có thể ngăn chúng sử dụng nó?


không có cách nào để tìm ra quá trình nào đang sử dụng bộ nhớ trao đổi ???

nhìn vào trình quản lý tác vụ windows (hoặc các công cụ tương tự) để biết số lượng tệp trang được sử dụng và lỗi trang.

Hoán đổi không phải là một điều trên mỗi quy trình, nó dành cho toàn bộ HĐH. "Vmstat" sẽ hiển thị cho bạn thông tin về số tiền bạn đang sử dụng.
jrockway

Tôi làm việc trên linux không phải trên wimdows

có lý do của việc sử dụng trao đổi này ..... ai đó đã cố gắng phân tích trang web của tôi đó là lý do tại sao toàn bộ sự việc xảy ra mà không có bất kỳ nguyên nhân nào từ phía chúng tôi. Cảm ơn tất cả các câu trả lời của bạn, nó luôn giúp tôi rất nhiều :-)

Câu trả lời:


41

Nếu bạn hết bộ nhớ vật lý, bạn sử dụng bộ nhớ ảo, nơi lưu trữ dữ liệu trong bộ nhớ trên đĩa. Đọc từ đĩa chậm hơn so với đọc từ bộ nhớ, vì vậy điều này làm mọi thứ chậm lại. (Trao đổi dữ liệu giữa bộ nhớ thực và bộ nhớ ảo là "hoán đổi". Không gian trên đĩa là "không gian hoán đổi".)

Nếu ứng dụng của bạn "sử dụng trao đổi", thì bạn cần sử dụng ít bộ nhớ hơn hoặc mua thêm RAM.

(Hoán đổi rất hữu ích vì các ứng dụng không được sử dụng có thể được lưu trữ trên đĩa cho đến khi chúng được sử dụng. Sau đó, chúng có thể được "phân trang" và chạy lại bình thường. Mặc dù vậy, nó không có trong bộ nhớ. đối với một số thứ khác, như bộ đệm đĩa. Vì vậy, đây là một tính năng rất hữu ích, nhưng nếu bạn không có đủ bộ nhớ vật lý để chạy chương trình của mình, bạn chắc chắn cần thêm bộ nhớ. May mắn thay, bộ nhớ thực sự rất rẻ trong những ngày này.)


1
Vì mục đích chính xác: bộ nhớ ảo có nghĩa là sử dụng địa chỉ bộ nhớ ảo (thứ luôn được kích hoạt trong CPU hiện đại, cho dù bạn có bao nhiêu RAM khả dụng) và không liên quan trực tiếp đến việc hoán đổi (mặc dù chúng được sử dụng kết hợp với nhau về cơ bản các khái niệm khác nhau).
fortran

@fortran, để tính chính xác gấp đôi, bộ nhớ ảo là thuật ngữ mà Windows sử dụng khi đề cập đến tệp hoán trang (hoán đổi) .
sleblanc

7

Một máy tính có một lượng bộ nhớ vật lý nhất định. Nhưng hầu hết thời gian chúng tôi muốn nhiều hơn. Vì vậy, chúng tôi trao đổi một số bộ nhớ trên đĩa.

Mỗi lần chúng ta cần bộ nhớ đó, nó cần được hoán đổi trở lại vào bộ nhớ (hoán đổi một số phần khác). Có những thuật toán cực kỳ thông minh để giảm thiểu độ trễ, nhưng đôi khi chúng ta vẫn phải chờ.

Trên cửa sổ, nếu bạn nhìn vào trình quản lý tác vụ, bạn có thể hiển thị các lỗi trang cột. Điều này cho thấy số lượng thời gian, một ứng dụng yêu cầu một phần bộ nhớ trên đĩa và cần được hoán đổi. Rất nhiều lỗi trang = ứng dụng chậm.

Quá trình này được sử dụng trên nhiều cấp độ. Tóm tắt từ nhanh đến chậm:

  • Ở cấp độ CPU, có các thanh ghi. Đây là những bộ nhớ nhanh nhất nhưng số lượng có hạn.
  • Ngoài ra trên CPU có bộ nhớ đệm nhỏ. Ở đây một phần nhỏ của chương trình đang chạy được lưu trữ để truy cập nhanh. Tìm kiếm trên các thuật toán dự đoán chi nhánh nếu bạn muốn biết thêm.
  • Đôi khi có bộ nhớ cache cấp 2 giữa CPU và bộ nhớ chính.
  • Cấp độ tiếp theo là bộ nhớ chính (RAM).
  • Cấp độ cuối cùng và chậm nhất trong tất cả là đĩa, đôi khi bạn có thể sử dụng thẻ nhớ USB làm bộ nhớ thêm.

3
cat /proc/pid/smaps

Nếu bạn không muốn sử dụng trao đổi, thì đừng sử dụng phân vùng trao đổi (nhận xét dòng trong /etc/fstab), nhưng điều đó sẽ ngăn bắt đầu quá trình mới và sẽ khiến malloc thất bại nếu bạn hết bộ nhớ vật lý. Nói chung, đó không phải là một ý tưởng hay ... không an toàn và thậm chí không hữu ích lắm, vì HĐH sẽ giữ các trang nóng trong bộ nhớ và sẽ trao đổi sang đĩa không được sử dụng gần đây.

Một giải pháp khác có thể là hack cơ sở dữ liệu của bạn để nó khóa các trang vào bộ nhớ (tôi biết điều đó có thể được thực hiện, nhưng tôi không thể nói cho bạn biết chính xác bây giờ như thế nào), nhưng dù sao, nó giống như cơ sở dữ liệu của bạn sẽ sử dụng chính nó. cơ chế lưu trữ.

Để biết hoán đổi là gì và bộ nhớ ảo hoạt động như thế nào ... Tôi khuyên bạn nên xem qua một số bài giảng về Hệ điều hành, có lẽ MIT Open Courseware có thể giúp ích.


Do cấu hình mặc định trên nhiều bản phân phối linux là bộ nhớ quá mức, điều "tệ nhất" sẽ xảy ra là kẻ giết người OOM sẽ bắt đầu bắn tỉa các quy trình, rất có thể bắt đầu bằng DBMS (và với các bảng "được lưu trữ trong RAM" có lẽ không tốt Điều).
symcbean

1

Tôi đã tìm thấy một phần câu trả lời. Bộ nhớ hoán đổi là một khoảng trống trong Đĩa cứng của máy tính mà Hệ điều hành sẽ sử dụng để đưa thông tin thực sự có trên RAM để giải phóng nó cho một ứng dụng khác. Điều này nên được thực hiện khi hệ thống cần bộ nhớ cho một quy trình mới và không có, vì vậy chúng ta có thể thấy rằng nếu hệ thống của chúng ta có nhiều RAM thì có thể sẽ không cần bộ nhớ SWAP.

CẬP NHẬT

Để tìm vị trí Hoán đổi không gian (hoặc bộ nhớ ảo), bạn có thể truy cập vào Trình quản lý tác vụ (CTRL + ALT + DEL) và bật từ XEM -> CỘT -> BỘ NHỚ VIRTUAL. Bây giờ chỉ cần tính toán sự khác biệt giữa việc sử dụng bộ nhớ và bộ nhớ ảo. Ngoài ra đây là hướng dẫn cách xem nếu bạn đang chạy Vista: http://www.ehow.com/how_5067693_increas-swap-space.html


-1

Hoán đổi là không gian đĩa cứng được sử dụng như RAM. Nó (tương đối nói) rất chậm, nhưng ngăn máy tính gặp sự cố khi chúng đang cố gắng xử lý nhiều dữ liệu hơn thì RAM của chúng có thể xử lý.

Để ngăn quá trình sử dụng trao đổi - cài đặt thêm RAM.


1
Nếu bạn không muốn trao đổi, hãy ngừng sử dụng tệp trang. Nhưng mong đợi những vấn đề khác.

1
Không phải vậy. Trao đổi là chuyển một khối dữ liệu từ ổ cứng vào bộ nhớ vật lý. Đọc một lần, thường là đủ nhanh.

@xtofl câu trả lời không đề cập đến việc hoán đổi, chỉ trao đổi phân vùng và nhận xét của gamecat không liên quan gì đến những gì bạn nói? : P
RapidWebs 17/07/14

-1

Nếu bạn không muốn các quy trình của mình sử dụng bộ nhớ trao đổi, chỉ cần vô hiệu hóa bộ nhớ trao đổi hoàn toàn. Thật không may, nếu bạn hết bộ nhớ, nhân Linux sẽ giết một số tiến trình đang chạy của bạn để giải phóng bộ nhớ để sử dụng.

Nếu bạn có đủ RAM cho hệ thống của mình, bạn thực sự có thể đi mà không cần trao đổi bộ nhớ.

Tôi có một máy tính xách tay với 768Mb RAM không sử dụng bộ nhớ trao đổi. Nó là đủ tốt cho nhu cầu của tôi. Tôi có một máy chủ với 256Mb RAM và không sử dụng bộ nhớ trao đổi. Nó đang chạy 8 máy chủ ảo bằng cách sử dụng ảo hóa OpenVZ, không có vấn đề gì.

Vì vậy, tùy thuộc vào bạn nếu bạn cần bộ nhớ trao đổi.


Làm thế nào bạn chạy 8 máy ảo trên một máy chỉ có 256 MB RAM?!?
warren

VZ có thể thực hiện được vì RAM không được phân vùng hoàn toàn vì các thư viện phổ biến được chia sẻ trên các máy ảo hoặc thứ gì đó có hiệu lực. Vì vậy, 8 x 64M không nhất thiết phải là 512M. :)
sybreon

Tuy nhiên - làm thế nào là thiết bị cơ bản chạy ổn định?
warren

Bằng cách hoán đổi các chương trình không hoạt động, bạn có thêm bộ nhớ cho bộ nhớ đệm tệp. Và điều đó tăng tốc mọi thứ. lần đọc này thường khá nhanh và có hiệu quả không đáng kể. nó không chỉ được sử dụng khi bạn vượt ra khỏi giới hạn liên quan đến RAM có sẵn của bạn. Đôi khi tôi đã thấy các máy có 16GB RAM sử dụng SWAP.
RapidWeb

hơn nữa, tôi không khuyên bạn nên tắt SWAP trên máy chủ Cơ sở dữ liệu. Khách hàng hoặc ứng dụng web của anh ta sẽ không hài lòng khi OOM giết chết back-end tất cả trong một hoạt động sao lưu hàng đêm đơn giản, hoặc một cái gì đó tương tự? Sẽ là thông minh hơn khi điều chỉnh bộ đệm cơ sở dữ liệu liên quan đến việc sử dụng ứng dụng và bộ nhớ khả dụng. nếu anh ta đã trao đổi, anh ta cần thêm ram hoặc để cấu hình máy chủ DB của mình tốt hơn. mặt khác, việc vô hiệu hóa SWAP sẽ ép buộc OOM giết chết máy chủ DB mỗi khi nó chuyển đổi. mà đánh giá bằng câu hỏi của mình, là thường xuyên.
RapidWebs
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.