Cách giải thích việc sử dụng bộ nhớ trên Windows Server ngoài danh sách các tiến trình đang chạy


9

Tôi có Máy chủ Windows 2003 chạy chậm một chút trong đó mức phí cam kết và mức sử dụng tệp trang tăng lên cho đến khi tôi khởi động lại. Để khắc phục điều này, tôi cần tìm hiểu những gì tiêu thụ hết bộ nhớ và đây là nơi bí ẩn lớn.

Số liệu thống kê hiện tại từ Trình quản lý tác vụ:

Physical Memory (K): 2096400
Commit Charge (K):   5364848
Page file usage:     5.11 GB

Tốt thôi, vì vậy, hãy kéo SysIternals Process Explorer và kiểm tra kích thước tập làm việc của mọi thứ đang chạy. Thủ phạm lớn nhất là một cá thể Tomcat sử dụng 121.980K WS, Kích thước VM 480.284K. Không có gì trong đó đến gần để giải thích về phí cam kết 5 GB.

Bước tiếp theo: SysIternals pslist : pslist -m, chia đầu ra theo cột và tính tổng các cột cho 61 quy trình được báo cáo.

SUM (Working Set)  : 681,484 K
SUM (Private Bytes): 593,424 K

Tôi có hiểu nhầm về cơ bản những gì các công cụ đang báo cáo? Tôi luôn có ấn tượng rằng một hệ điều hành thực sự sẽ chiếm ít bộ nhớ hơn toàn bộ bộ nhớ ảo được ánh xạ bởi một quá trình, với giả định rằng nó thực sự sẽ không bao giờ sử dụng nhiều như vậy, và nhìn vào VM ở đây là Một cá trích đỏ.


1
Cập nhật: Có, hệ thống này đang phân trang và tôi thường xuyên nhận được cảnh báo "Hết bộ nhớ ảo". Bất cứ khi nào tôi nhận được cảnh báo, tôi sẽ kiểm tra các số liệu thống kê về bộ nhớ và không có quá trình nào có vẻ đặc biệt sai, nhưng chỉ số Bộ nhớ, Số byte được cam kết luôn trên 5 GB.
jpdaigle

Câu trả lời:


1

JP, tôi tin rằng nhận xét của bạn rằng đây là máy chủ kiểm tra đơn vị xây dựng / đơn vị tự động đang chạy ít hơn mã ổn định nói lên tất cả. Tôi đoán là máy chủ này cần phải được khởi động lại thường xuyên vì mã không ổn định chạy trên nó có thể bị rò rỉ bộ nhớ đang mang lại cho bạn các triệu chứng bạn đang thấy. Rò rỉ bộ nhớ sẽ không được liệt kê trên bất kỳ cây quy trình nào của các quy trình đang chạy vì chúng là bộ nhớ bị lấy bởi các quy trình không còn tồn tại và vẫn được phân bổ, mặc dù quá trình liên quan đến chúng đã qua lâu.

Có cửa sổ bảo trì thường xuyên để cho phép bạn tự động khởi động lại máy này, có thể hàng đêm, vài lần một tuần hoặc hàng tuần tùy thuộc vào tốc độ hành vi này bắt đầu thể hiện các vấn đề về hiệu suất.

Chúng tôi có các máy chủ Ứng dụng Oracle trên Windoze một lúc trước cần được khởi động lại hai lần mỗi ngày. Chúng tôi đuổi người dùng vào giờ ăn trưa, và vào giữa đêm mỗi ngày. Đó là một vài năm trước, với mã sản xuất được cho là ổn định từ Oracle.


2

Xin lỗi vì chỉ dán một số liên kết - nhưng chúng tôi đã sử dụng một số kỹ thuật để tìm rò rỉ bộ nhớ, sử dụng logparser và powershell, vì vậy tôi sẽ chia sẻ.

http://bloss.msdn.com/debuggingtoolbox/archive/2008/08/22/powershell-script-chart-and-statistic-from-top-20-objects-leaking.aspx

(Trang web Trình gỡ lỗi không bao giờ nghi ngờ của Thy là tuyệt vời): http://bloss.msdn.com/carloc/archive/2007/09/14/s somebody-you-need-to-ledge-b Before-start-debugging.aspx

Tôi cũng sẽ cung cấp một liên kết đến cái nhìn sâu sắc tuyệt vời của Mark Russinovich về Sử dụng bộ nhớ trên Windows:

http://bloss.technet.com/markrussinovich/search.aspx?q=memory&p=1

Không mở các trường hợp thực tế của Microsoft, trang web của Nhóm Hiệu suất cũng có rất nhiều thông tin tốt: http://bloss.technet.com/askperf/Default.aspx?p=2


1

Công cụ pricipl để giúp chẩn đoán điều này là perfmon. Các quầy tôi nhìn vào (để bắt đầu) là:

Bộ nhớ, byte được cam kết Đây là thước đo nhu cầu của bộ nhớ ảo
Quá trình, Bộ làm việc, Bộ nhớ ảo _Total trong "kích hoạt" sử dụng
Paging File,% pagefile đang sử dụng
Bộ nhớ, Trang / giây (đây không nhất thiết là chỉ số của bộ nhớ thấp , mặc dù mọi người dường như cho rằng nó làm)
Bộ nhớ, Trang đầu ra / giây có bao nhiêu trang bộ nhớ ảo được ghi vào trang để giải phóng khung hình trang RAM cho các mục đích khác mỗi giây

Bộ nhớ, Bộ nhớ byte
bộ nhớ cache, Bộ nhớ byte không được lưu trữ bộ nhớ, Bộ nhớ byte được phân trang theo nhóm
,
Bộ nhớ mã hệ thống Tổng số byte
, Trình điều khiển hệ thống Tổng số byte

khi tổng này gần tới 2GB, bạn thường gặp vấn đề về hiệu năng do kiến ​​trúc 32 bit

Bộ nhớ, MByte có sẵn - điều này đo lượng RAM có sẵn để đáp ứng nhu cầu cho bộ nhớ ảo (phân bổ mới hoặc để khôi phục một trang từ tệp trang).

Xem thêm http://members.shaw.ca/bsanders/WindowsGeneralWeb/RAMVirtualMemoryPageFileEtc.htm


Liên kết thú vị. Trên máy chủ này, tôi thấy tổng số Bộ công việc xử lý ở mức 640 MB, nhưng "Bộ nhớ, byte được cam kết" là 5,4GB. Không có quầy nào khác mà bạn đề cập là rất cao. Tôi thường xuyên nhận được cảnh báo "Hết bộ nhớ ảo", đó là lý do tại sao tôi đang điều tra. Thêm bình luận cho OP.
jpdaigle

1

Máy chủ đó đã chạy được bao lâu kể từ lần khởi động lại cuối cùng? Thật đáng tiếc khi Windows bị rò rỉ bộ nhớ. tức là bộ nhớ được phân bổ không phải lúc nào cũng được giải phóng trở lại hệ thống. Các triệu chứng chính xác là những gì bạn đang thấy. Nếu bạn chưa làm điều đó, tôi sẽ đề nghị khởi động lại ít nhất một lần một tuần. Nhiều trung tâm dữ liệu khởi động lại Windows mỗi ngày, vì làm như vậy sẽ cắt giảm đáng kể các cuộc gọi hỗ trợ. Tất nhiên điều đó dễ thực hiện hơn nhiều khi bạn sử dụng các cụm vì không có thời gian.


0

Người ta nói rằng có một sysadmin ở đâu đó thực sự hiểu các chỉ số bộ nhớ Windows, nhưng tôi chưa bao giờ gặp chúng.

Tuy nhiên, thường không quá khó để tìm ra một quy trình xử lý sai. Hãy thử sử dụng Perfmon để xem xét các bộ đếm quy trình khác nhau như tay cầm hoặc lỗi Trang / giây.

JR

Suy nghĩ thêm: bạn có chắc là bạn thực sự thiếu bộ nhớ. Điều quan trọng là liệu bạn có được phân trang hay không. Nếu không có phân trang, bạn không thiếu bộ nhớ. Sử dụng PerfMon, hãy xem bộ đếm Bộ nhớ - Trang / giây.


Tôi không thấy bất cứ điều gì rõ ràng trong các quy trình đang chạy. Có cách nào để bộ nhớ không bị thu hồi bởi HĐH sau khi quá trình thoát ra không? Đây là một máy chủ thử nghiệm đơn vị xây dựng / đơn vị tự động, do đó, tất nhiên các quy trình luôn bị sập, vì nó luôn chạy các bản dựng cạnh chảy máu được xây dựng tự động từ SVN.
jpdaigle

Xem bản chỉnh sửa của tôi để biết thêm suy nghĩ
John Rennie

0

Hãy nhớ rằng tập làm việc là bit bộ nhớ thực sự được biểu thị bằng bộ nhớ vật lý THỰC SỰ. bạn cũng có phí bộ nhớ ảo và Windows thực hiện chia sẻ trang mã, một số khối MFC sẽ được chia sẻ giữa rất nhiều quy trình mà không cần sao chép việc sử dụng bộ nhớ. Thêm vào đó, bạn không muốn Windows giữ bộ nhớ cache của hệ thống tập tin càng lớn càng tốt (tôi đã thấy nó tăng lên 800 MB trên máy tính xách tay 2,5 GB trước đó).

Quản lý bộ nhớ Windows rất mạnh mẽ. Tuy nhiên, một khi Windows bắt đầu phân trang, mọi thứ trở nên tồi tệ và bạn LUÔN phải chừa chỗ cho bộ đệm của hệ thống tập tin - luôn luôn luôn như vậy. Tôi thường xuyên phải tắt máy và khởi động lại Firefox khi hơn 80 tab của tôi điều khiển mức tiêu thụ bộ nhớ lên tới 1,2gb / 1,2 + gb.

Windows cũng làm mờ dòng một chút, giữa các trang trong bộ đệm và các trang được liệt kê dưới dạng bộ nhớ / bộ làm việc.

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.