Windows sử dụng quá nhiều RAM, làm thế nào để chẩn đoán hog tài nguyên


73

Tôi có 16GB RAM hệ thống. Khi khởi động không có ứng dụng nào mở, ngoại trừ trình quản lý tác vụ Windows đang sử dụng khoảng 3gb RAM. Tôi đã xem trong tab quy trình, nhưng dường như không có gì khác thường. Làm thế nào tôi có thể tìm ra lý do tại sao Windows của tôi sử dụng rất nhiều RAM.

nhập mô tả hình ảnh ở đây

tất cả các quy trình từ tất cả người dùng

nhập mô tả hình ảnh ở đây


Đọc từ poolmon, có vẻ như trình điều khiển máy chủ không dây của tôi đang sử dụng khoảng 0,4GB RAM. Ngay cả khi tôi loại bỏ, nó vẫn sẽ sử dụng 2,6GB khi khởi động, vẫn còn quá nhiều.

nhập mô tả hình ảnh ở đây


Sau khi cài đặt lại trình điều khiển không dây liên quan đến rò rỉ bộ nhớ. Tôi có một ảnh chụp màn hình mới và muốn xác nhận rằng đó thực sự là một rò rỉ bộ nhớ.

nhập mô tả hình ảnh ở đây


3
Trước hết, bạn chỉ có 12GB. Một trong bốn thanh 4GB của bạn không tốt hoặc ngồi kém hoặc bo mạch chủ của bạn không hỗ trợ 16GB. Thứ hai, bạn đã thử chạy bất kỳ chương trình bảo mật nào để kiểm tra phần mềm độc hại chưa? Security Essentials được tích hợp sẵn, vì vậy hãy đảm bảo cập nhật các định nghĩa của nó và chạy quét. Ngoài ra, hãy thử một số chương trình chống rootkit vì rootkit đặc biệt ẩn (mặc dù chúng cũng thường cố gắng giữ cấu hình thấp để không bị chú ý và sử dụng hết vài gigabyte RAM).
Synetech

Bạn có thể muốn xem hiệu suất -> giám sát tài nguyên
Journeyman Geek

Hãy thử chạy lệnh danh sách tác vụ chuyển hướng đầu ra của nó sang một tệp, C: \ blah> danh sách tác vụ> aa, sau đó mở tệp aa, bạn thấy tổng số cho mỗi quy trình, ví dụ 15.100K, xóa K sau chúng và tính tổng bằng Excel. Xem tổng số phù hợp với con số được sử dụng mà trình quản lý tác vụ cung cấp cho bạn gần biểu đồ được sử dụng. Đối với tôi tổng số từ danh sách tác vụ là 4GB và trình quản lý tác vụ cho biết 4,5 GB. Tôi không thể giải thích sự khác biệt tôi có nhưng nó không lớn. Sẽ rất thú vị nếu bạn có sự khác biệt lớn.
barlop

Tôi không có excel
Vader

1
Các thẻ NDxx là ndis.sys. Tôi đoán BRCM là Broadcom. Điều đó sẽ chỉ ra bộ điều hợp mạng của bạn là vấn đề.
David Marshall

Câu trả lời:


82

Bạn bị rò rỉ bộ nhớ do trình điều khiển. Nhìn vào giá trị cao của bộ nhớ kernel nonpaged. Trong trường hợp của bạn, điều này là hơn 3,7 GB. Bạn có thể sử dụng poolmon để xem trình điều khiển nào gây ra mức sử dụng cao.

Cài đặt Windows WDK , chạy poolmon, sắp xếp nó Psau loại pool để không phân trang được đặt lên trên và qua Bbyte để xem thẻ sử dụng hầu hết bộ nhớ. Chạy poolmon bằng cách vào thư mục cài đặt WDK, đi đến Công cụ (hoặc C: \ Chương trình tệp (x86) \ Windows Kits \ 10 \ Tools \ x64) và nhấp vào poolmon.exe.

Bây giờ hãy xem pooltag nào sử dụng hầu hết bộ nhớ như được hiển thị ở đây:

nhập mô tả hình ảnh ở đây

Bây giờ hãy mở một dấu nhắc cmd và chạy lệnh findstr. Để thực hiện việc này, hãy mở dấu nhắc cmd và nhập "cd C: \ Windows \ System32 \ driver", không có dấu ngoặc kép. Sau đó nhập "findstr / s __ . ", Trong đó __ là thẻ (tên ngoài cùng bên trái trong poolmon). Làm điều này để xem trình điều khiển nào sử dụng thẻ này:

nhập mô tả hình ảnh ở đây

Bây giờ, hãy chuyển đến thư mục trình điều khiển (C: \ Windows \ System32 \ trình điều khiển) và nhấp chuột phải vào trình điều khiển được đề cập (intmsd.sys trong ví dụ hình ảnh ở trên). Nhấp vào Thuộc tính, chuyển đến tab chi tiết để tìm Tên sản phẩm. Hãy tìm một bản cập nhật cho sản phẩm đó.

Nếu pooltag chỉ hiển thị trình điều khiển Windows hoặc được liệt kê trong pooltag.txt ( "C:\Program Files (x86)\Windows Kits\8.1\Debuggers\x64\triage\pooltag.txt")

bạn đã sử dụng xperf để theo dõi nguyên nhân gây ra việc sử dụng . Cài đặt WPT từ SDK Windows , mở cmd.exe với tư cách quản trị viên và chạy này:

xperf -on PROC_THREAD + LOADER + POOL -stackwalk Pool Alloc + PoolFree + Pool ALLocSession + PoolFreeSession -BufferSize 2048 -MaxFile 1024 -FileMode Thông tư && hết thời gian -1 && xperf -d C:

chụp 30 -60s tăng trưởng. Mở ETL bằng WPA.exe, thêm biểu đồ Pool vào khung phân tích.

Đặt cột pooltag ở vị trí đầu tiên và thêm cột ngăn xếp. Bây giờ hãy tải các ký hiệu bên trong WPA.exe và mở rộng ngăn xếp của thẻ mà bạn đã thấy trong poolmon.

nhập mô tả hình ảnh ở đây

Bây giờ tìm trình điều khiển bên thứ 3 khác mà bạn có thể thấy trong ngăn xếp. Ở đây Threthẻ (Chủ đề) được AVKCl.exe sử dụng từ G-Data. Tìm kiếm các bản cập nhật trình điều khiển / chương trình để sửa nó.


1
ồ xin lỗi. @Jebediah Kerman bạn đã chạy lệnh findstr chưa? Từ tên nó có thể liên quan đến trình điều khiển thẻ mạng. Nếu bạn vẫn gặp sự cố, hãy chạy RAMMap, lưu trữ dữ liệu dưới dạng RMP, nén tệp RMP và tải lên zip.
magicandre1981

Điều này nghe có vẻ ngu ngốc. Nhưng làm thế nào để tôi bắt đầu poolmon. Tôi đã từng có thể tìm kiếm "poolmon.exe" và khởi chạy
Vader

@JebediahKerman Tôi nghĩ bạn đã làm điều này và tìm thấy các thẻ. Là hình ảnh từ bài viết của bạn không phải là poolmon của bạn?
magicandre1981

Hình ảnh là của tôi. vì một số lý do, chỉ số tìm kiếm không đầy đủ.
Vader

@JebediahKerman bạn đã xem NDFT này là gì chưa? YOu cũng có thể sử dụng xperf để theo dõi việc sử dụng nhóm: channel9.msdn.com/Shows/Defrag-Tools/ Kẻ
magicandre1981

15

Vâng, điều đầu tiên, trước khi tôi đi vào một câu trả lời chi tiết hơn. Trong ảnh chụp màn hình đầu tiên của bạn, Nhóm không phân trang của bạn (một loại sử dụng bộ nhớ kernel) ở mức 1,3 GB. Điều đó có vẻ cao bất thường đối với tôi, đặc biệt là chỉ 30 phút sau khi khởi động. Tôi đoán rằng tôi có thể thấy NP Pool tăng cao như vậy sau một thời gian dài sử dụng hoặc với một chương trình bị rò rỉ như một cái sàng. Ngược lại, NP Pool của tôi thường nằm trong khoảng từ 100 đến 200 megabyte và nhóm phân trang của tôi có thể lên tới 400 hoặc 500 (và đó là sau khi hệ thống của tôi chạy mà không cần khởi động lại trong nhiều tuần.)


Bạn có thể bật một vài cột bổ sung trong Trình quản lý tác vụ bằng cách bấm chuột phải vào tiêu đề cột và chọn các cột chọn. Bạn nên thêm Working Set (private), Working Set (shared), Commit, và NP Pool. Tôi sẽ quét qua tất cả các quy trình của bạn từ tất cả người dùng và xem liệu bất kỳ ai trong số họ có NP Pool nhiều hơn khoảng 256KB. Nếu bạn thấy bất kỳ, đặc biệt là bất kỳ mức nào cao hơn đáng kể, đó có thể là nguồn gốc của vấn đề hoặc ít nhất là một phần của vấn đề.

Tổng số bộ công việc của bạn, số lượng bộ nhớ vật lý được sử dụng bởi một quy trình, là sự kết hợp của các bộ làm việc riêng và chia sẻ (WS). Riêng tư thường lớn hơn đối với hầu hết các quy trình, tuy nhiên có thể có một số sử dụng số lượng WS được chia sẻ lớn hơn. Cả hai thường nên tổng hợp với tổng WS. Cam kết là số lượng bộ công việc của bạn đã được cam kết cho cửa hàng sao lưu (trong hầu hết các trường hợp, tệp trang Windows). Các ứng dụng nền sẽ thường có Cam kết lớn hơn WS, cho thấy phần lớn nhóm phân trang của chúng đã bị tráo đổi khỏi bộ nhớ và vào tệp hoán trang của bạn (điều này khá bình thường đối với các ứng dụng máy tính để bàn đã được thu nhỏ và không được sử dụng trong một thời gian).

Nhóm không phân trang là bộ nhớ không thể và sẽ không bao giờ bị tráo đổi khỏi bộ nhớ vật lý ... đó thực sự là cách sử dụng bộ nhớ vật lý tối thiểu vĩnh viễn của bạn. Bộ nhớ NP Pool thường chứa mã chương trình và các phần quan trọng phải có trong bộ nhớ vật lý để hoạt động chính xác hoặc an toàn, các đống đặc biệt, v.v ... Trong số 60 quy trình, nếu tất cả chúng đều có bộ nhớ NP Pool 256KB, thì việc sử dụng bộ nhớ vật lý tối thiểu tuyệt đối của bạn sẽ vào khoảng 15.360KB. Trong hầu hết các trường hợp, một hoặc hai ứng dụng có thể có NP Pool 256KB, trong khi hầu hết có ít hơn, thường ít hơn đáng kể (hoặc không có). Rất khó có khả năng hệ thống sẽ bao gồm toàn bộ tất cả các quy trình làm việc được thiết lập, vì vậy đừng bao giờ mong đợi việc sử dụng bộ nhớ sẽ ở mức thấp như vậy.


Cuối cùng, điểm cần có nhiều bộ nhớ là để tránh phải dữ liệu trang đến và từ không gian bộ nhớ mở rộng (trao đổi, tệp trang) trên một đĩa vật lý. Phân trang là một quá trình bao gồm di chuyển các khối bộ nhớ vật lý được phân bổ xung quanh, đẩy một số vào đĩa và đưa những thứ khác vào bộ nhớ vật lý từ đĩa. Phân trang là, để giữ cho nó đơn giản, rất không mong muốn. Nó không phải là "xấu" mỗi lần, nhưng nó có thể là một lực cản thực sự đối với hiệu suất khi nó xảy ra quá thường xuyên. Điểm cuối cùng của việc tăng tổng RAM vật lý trong một hệ thống là cho phép nhiều quá trình giữ được nhiều cam kết hơn trong bộ nhớ vật lý (bộ làm việc lớn hơn). Tiêu thụ bộ nhớ không phải là vấn đề và khi nhiều quá trình thực thi sử dụng nhiều bộ nhớ hơn, tổng hiệu năng hệ thống và hiệu suất quá trình hoạt động thường sẽ cao hơn,

Windows quản lý bộ nhớ cho bạn và tự động trang dữ liệu vào và ra khỏi bộ nhớ đến và từ tệp (trao đổi) trang cho bạn. Nếu bạn chạy một quy trình cần 9GB bộ nhớ và hệ thống của bạn đã sử dụng 4GB (trong số 12 GB), thì hệ thống sẽ tự động tìm ra quy trình nào không cần truy cập ngay vào toàn bộ bộ công việc của họ và nó sẽ trang một số hoặc tất cả của nhóm phân trang của họ ra để trao đổi để giải phóng thêm 1GB. Nếu quy trình lớn của bạn cuối cùng cần nhiều bộ nhớ hơn, các cửa sổ sẽ tiếp tục giảm tập hợp các quy trình khác cho đến khi nó có đủ không gian trống để phân bổ khối mới được yêu cầu. Quá trình lớn của bạn cuối cùng có thể tiêu thụ tất cả bộ nhớ khả dụng ngoại trừ NP Pool và có lẽ một số chi phí tối thiểu bổ sung để thực hiện định kỳ các quy trình không cho phép Windows giải phóng thêm bộ công việc của họ (i. e. họ có các lỗi trang đang chờ xử lý rằng Windows sẽ trao đổi bộ nhớ vật lý, nhưng vì chúng đang được yêu cầu nên chúng không thể được di chuyển.)

Nếu một quá trình cần nhiều bộ nhớ hơn mức cho phép truy cập (các quy trình 32 bit thường có thể truy cập 2Gb và một số ít hơn 4Gb với các kỹ thuật nâng cao, trong khi các quy trình 64 bit thường có thể truy cập khoảng 48Gb bộ nhớ), thì đôi khi các cửa sổ sẽ thử để ảo hóa bộ nhớ của nó với không gian trao đổi. Nếu ứng dụng 32 bit muốn sử dụng 2Gb dung lượng tối đa được phép, nhưng chỉ có 1,2Gb, cửa sổ sẽ dự trữ toàn bộ 2Gb trong tệp trang và di chuyển dữ liệu của chính các quy trình vào và ra khỏi tệp trang khi cần để hỗ trợ sử dụng bộ nhớ của ứng dụng. Tổng mức sử dụng "bộ nhớ" trong trường hợp này có thể lớn hơn bộ nhớ vật lý khả dụng, khi đi bằng Total Commit. Tổng Cam kết thường sẽ tối đa ở kích thước tệp tổng trang lớn, khi được hệ thống quản lý, thường là 2-3 lần dung lượng bộ nhớ vật lý. Trong trường hợp của bạn,


Một điểm cuối cùng. Bạn đã nói trong câu trả lời của mình rằng bạn có 16Gb RAM, trong đó Trình quản lý tác vụ chỉ nhìn thấy 12Gb RAM. Một trong hai điều ở đây. Hệ thống của bạn thực sự chỉ có 12Gb RAM hoặc một trong những gậy của bạn không được đăng ký đúng cách. Nếu một thanh ram (tôi giả sử là gậy 4x 4Gb), nó có thể xấu, có thể không được đặt hoàn toàn đúng cách trong bo mạch chủ của bạn hoặc bo mạch chủ của bạn có thể có vấn đề phát hiện bộ nhớ.

Để kiểm tra xem nó có phải là cái sau hay không, trước tiên bạn nên cập nhật BIOS bo mạch chủ của bạn lên phiên bản mới nhất. Tôi đã gặp một vấn đề tương tự ... sáu thanh ram DDR3 ba kênh của tôi (6x 2Gb) đều tốt khi dựa trên từng thử nghiệm riêng lẻ ... nhưng bo mạch chủ của tôi ngẫu nhiên quyết định không đếm một hoặc hai trong số chúng thường xuyên, thường để lại cho tôi chỉ với 8Gb ram. Một bản cập nhật BIOS đã khắc phục sự cố và hiện tại tôi có quyền truy cập đáng tin cậy vào tất cả 12Gb bộ nhớ của mình.


thật thú vị..và tôi chỉ nhận thấy rằng bộ nhớ không phân trang của anh ấy rất lớn..mine là 539 MB được phân trang, 139 MB không phân trang. U rõ ràng biết nhiều hơn tôi về điều này .. Nhưng, bạn đã sai về tổng cam kết.U ghi "Tổng cam kết thường sẽ đạt tối đa ở kích thước tệp tổng trang lớn" RAM của tôi là 12GB. Tôi đặt tệp trang của tôi thành 4000MB (3,8GB?) tối thiểu và bộ nhớ 1,5-2x là max. Cam kết tối đa của tôi là 15GB (commit = 7 / 15 hiện tại), tệp trang của tôi là khoảng 4GB hoặc có thể ít hơn một chút như 3,8GB. Cam kết tương tự như kích thước tệp trang + kích thước RAM. Khi trang của tôi là 12 GB, mức cam kết tối đa của tôi là khoảng 24 GB. Pagefile gần như tối đa
3,8GB

@barlop: Chà, bạn phần nào hiểu nhầm cam kết là gì. Về mặt kỹ thuật, phí cam kết là tổng "không gian bộ nhớ gần như có thể định địa chỉ", bao gồm không gian được hỗ trợ bởi các trình quản lý bộ nhớ mở rộng và nhận thức địa chỉ lớn. Cam kết tối đa sẽ không phải là tệp trang + RAM, thay vào đó, nó sẽ được mô tả là tổng không gian địa chỉ ảo được quản lý hệ thống. Nói chung, tệp trang phải bao gồm ít nhất là tổng kích thước bộ nhớ vật lý và thêm vào đó mở rộng ra ngoài tổng kích thước bộ nhớ vật lý. Trong trường hợp của bạn, tôi đã mong muốn cam kết ít nhất là 18Gb (1,5 lần) hoặc 24Gb (2 lần), tuy nhiên ...
jrista

... sẽ là trường hợp cho một tệp trang được quản lý hệ thống. Có vẻ như bạn đã tự điều chỉnh cài đặt tệp trang của mình, trong trường hợp đó tôi sẽ phải biết thêm về cấu hình cụ thể của bạn để cho bạn biết lý do tại sao cam kết hiện tại của bạn là 15Gb (vì tệp trang 3,8 / 4Gb sẽ chỉ ra mức cam kết là 16Gb chứ không phải 15Gb .) Hoàn toàn có thể định cấu hình thủ công không có tệp trang hoặc tệp trang quá nhỏ và điều đó có thể dẫn đến các vấn đề về hiệu năng và phân bổ bộ nhớ. Đề xuất tốt nhất, trừ khi bạn có thiết lập máy chủ (ví dụ cơ sở dữ liệu) đặc biệt cao, là cho phép các cửa sổ quản lý tệp trang của nó.
jrista

Một lưu ý cuối cùng. Để có hiệu suất tối đa, tốt nhất là để các cửa sổ phân bổ kích thước tệp trang tối đa trước thời hạn. Điều này thường được thực hiện trên các thiết lập máy chủ như cơ sở dữ liệu SQL Server, trong đó bạn có thể phân bổ 64Gb trở lên (thường gấp 2 lần kích thước ram vật lý, do đó, thậm chí có thể 128Gb hoặc 256Gb) cho một tệp trang được phân bổ đều giữa nhiều đĩa vật lý để đạt hiệu suất tối đa . Các tệp trang phân tán, đặc biệt là khi được phân bổ ở kích thước tối đa, cho phép đọc / ghi xen kẽ trên tất cả các đĩa tham gia, do đó cho phép cải thiện hiệu suất phân trang thông qua I / O song song.
jrista

Lấy ví dụ về tải bộ nhớ nặng, hệ thống của tôi hiện có: mức sử dụng bộ nhớ vật lý 7,5 / 12Gb; Cam kết 14,7 / 23,3Gb; Bể bơi phân trang 491mb; Bể bơi 145mb np. Đây là cho 146 quy trình, nhóm phân trang tối đa 2276k nhóm np tối đa 263k. Kích thước cam kết lớn nhất 696.396k và cho cùng một quy trình WS là 714.256k (một quy trình tab Opera.) (Số lượng quá trình cao của tôi là do trình duyệt web ... họ cô lập các tab qua quy trình hiện nay và tôi là một siêu nhân ... hàng chục mở cùng một lúc, vì vậy hàng chục quy trình bổ sung.)
jrista

12

Làm thế nào tôi có thể tìm ra lý do tại sao Windows của tôi sử dụng rất nhiều RAM.

Đó là sử dụng rất nhiều RAM vì nó được thiết kế để làm như vậy. Hoàn toàn không có chi phí liên quan đến việc sử dụng RAM. Trên thực tế, RAM đã qua sử dụng tốt hơn RAM miễn phí vì hệ điều hành không phải làm gì để sử dụng. Sử dụng RAM miễn phí đòi hỏi phải sử dụng nó mà cần nỗ lực.

Nếu bạn đang nghĩ "Tôi muốn RAM của mình miễn phí ngay bây giờ để tôi có thể sử dụng nó sau", hãy quên nó đi. RAM không phải là miễn phí để sử dụng sau này. Bạn có thể sử dụng nó bây giờ sử dụng nó sau. Không sự đánh đổi ở đây - hoàn toàn không có nhược điểm nào khi sử dụng RAM.

RAM được sử dụng và chuyển trực tiếp từ sử dụng này sang sử dụng khác mà không phải trải qua nỗ lực làm cho nó miễn phí chỉ để làm cho nó được sử dụng lại. Các hệ điều hành hiện đại chỉ để lại RAM miễn phí khi chúng không có lựa chọn nào khác.


12
Nếu hệ thống windows7 của tôi là sử dụng 3GB RAM khi khởi động, không có ứng dụng mở, somethings phải là người ngồi sai
Vader

5
@JebediahKerman Tại sao bạn nói vậy? Tôi cố gắng giải thích cho bạn tại sao không phải vậy và tại sao Windows được thiết kế để làm điều đó. Bạn không hiểu lời giải thích của tôi? Hoặc, nếu bạn không đồng ý với nó, bạn có thể giải thích bạn nghĩ tôi sai ở đâu không?
David Schwartz

11
@DavidSchwartz trả lời sai hoàn toàn. Anh ta bị rò rỉ trí nhớ bởi một người lái xe
magicandre1981

9
@DavidSchwartz: Hành vi bạn mô tả (phân bổ RAM có thể được sử dụng lại) nhất thiết phải được thực hiện từ bộ nhớ có thể phân trang. Con số đáng lo ngại là 1,3 GB bộ nhớ nonpaged. Bạn không thể miễn phí rằng đối với các tài nguyên khác, những 1,3 GB đó sẽ đi đâu? Trở thành "nonpaged" có nghĩa là người sở hữu nói rằng "các byte này rất quan trọng, bạn thậm chí không thể đặt chúng vào đĩa, chứ đừng nói đến việc loại bỏ chúng".
MSalters

25
Tại sao câu trả lời này của người Viking được bình chọn rất cao? Nó hoàn toàn bỏ lỡ điểm. Bất kể các từ cụ thể được sử dụng (bắt đầu hoàn toàn rõ ràng), câu hỏi là không “Why is Windows using RAM?”, câu hỏi là “Why do the RAM usage numbers not add up; why is one part reporting a higher usage than another part?”Bài đăng này nên là một nhận xét tốt nhất vì nó không giải quyết câu hỏi thực tế hoặc thậm chí cố gắng trả lời nó; nó chỉ vang lên với một chút lời khuyên, và lời khuyên tồi tệ ở đó vì nếu OP đã bỏ qua nó như đề xuất, rò rỉ bộ nhớ sẽ không được phát hiện.
Synetech

2

Một lý do không được đề cập ở trên là Hyper-V.

Tôi đã có thể xác định nó với tiện ích tuyệt vời RamMap :

nhập mô tả hình ảnh ở đây

Ảnh chụp màn hình là từ sau. Trước khi bộ nhớ "Khóa bị khóa" là hơn 6GB, hơn 80% RAM trong máy cụ thể này. Tôi đã phải vào Hyper-V Manager và tắt "Dynamic Memory". Thật kỳ lạ, ngay cả sau khi kích hoạt lại, bộ nhớ "Khóa trình điều khiển" vẫn ở mức thấp - Tôi chỉ có thể đoán rằng các phiên bản trước đã tăng nó và Hyper-V không tự động giảm bộ nhớ được phân bổ:

nhập mô tả hình ảnh ở đây

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.