วิธีอธิบายการใช้หน่วยความจำบน Windows Server นอกรายการกระบวนการที่กำลังทำงานอยู่


9

ฉันมี Windows 2003 Server ทำงานช้าลงเล็กน้อยซึ่งการคิดค่าธรรมเนียมและการใช้ไฟล์หน้าทำเครื่องหมายขึ้นเรื่อย ๆ จนกว่าฉันจะรีบูตในที่สุด ในการแก้ไขปัญหานี้ฉันจำเป็นต้องค้นหาว่าอะไรคือการใช้หน่วยความจำทั้งหมดและนี่คือที่ลึกลับอันยิ่งใหญ่

สถิติปัจจุบันจากตัวจัดการงาน:

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

ได้ดังนั้นลองดึงSysInternals Process Explorerและตรวจสอบขนาดชุดการทำงานของทุกสิ่งที่กำลังทำงานอยู่ ผู้ร้ายที่ใหญ่ที่สุดคืออินสแตนซ์ Tomcat โดยใช้ 121,980K WS, 481,284K ขนาด VM ไม่มีสิ่งใดในนั้นใกล้เคียงกับการอธิบายการชาร์จ 5 GB

ขั้นตอนถัดไป: SysInternals pslist : pslist -mแยกเอาต์พุตตามคอลัมน์และคำนวณผลรวมคอลัมน์สำหรับกระบวนการ 61 รายการที่รายงาน

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

ฉันเข้าใจว่าเครื่องมือรายงานอะไรอยู่หรือไม่ ฉันมักจะตกอยู่ภายใต้ความประทับใจว่าระบบปฏิบัติการจะใช้หน่วยความจำน้อยกว่าหน่วยความจำเสมือนเต็มจำนวนที่ถูกแมปโดยกระบวนการโดยตั้งสมมติฐานว่ามันจะไม่ใช้งานจริงมากนักและการดู VM ที่นี่คือ ปลาเฮอริ่งแดง


1
อัปเดต: ใช่ระบบนี้เป็นเพจจิ้งและฉันมักจะได้รับคำเตือน "หมดหน่วยความจำเสมือน" เมื่อใดก็ตามที่ฉันได้รับคำเตือนฉันจะตรวจสอบสถิติหน่วยความจำและไม่มีกระบวนการใดที่ดูเหมือนจะทำงานผิดปกติเป็นพิเศษ แต่หน่วยความจำสถิติไบต์ที่ตกลงไว้มีขนาดเกิน 5 GB เสมอ
jpdaigle

คำตอบ:


1

JP, ฉันเชื่อว่าความคิดเห็นของคุณว่านี่เป็นเซิร์ฟเวอร์ทดสอบสร้าง / หน่วยอัตโนมัติที่ทำงานน้อยกว่ารหัสที่เสถียรบอกว่าทั้งหมด ฉันเดาว่าเซิร์ฟเวอร์นี้ต้องรีบูตบ่อยครั้งเนื่องจากโค้ดที่ไม่เสถียรทำงานอยู่อาจมีการรั่วไหลของหน่วยความจำที่ทำให้คุณมีอาการที่คุณเห็น การรั่วไหลของหน่วยความจำจะไม่ถูกแสดงบนแผนผังกระบวนการใด ๆ ของกระบวนการที่กำลังทำงานอยู่เนื่องจากเป็นหน่วยความจำที่ถูกจับโดยกระบวนการที่ไม่มีอยู่อีกต่อไปและยังคงถูกจัดสรรแม้ว่ากระบวนการที่เกี่ยวข้องกับกระบวนการเหล่านั้นจะหายไปนาน

รับหน้าต่างการบำรุงรักษาบ่อยครั้งเพื่อให้คุณสามารถรีบูทเครื่องนี้โดยอัตโนมัติอาจจะทุกคืนสองสามครั้งต่อสัปดาห์หรือรายสัปดาห์ขึ้นอยู่กับความเร็วที่พฤติกรรมนี้เริ่มแสดงถึงปัญหาด้านประสิทธิภาพ

เรามีเซิร์ฟเวอร์ Oracle Application Servers บน Windoze ในขณะที่ต้องรีบูตสองครั้งต่อวัน เราเตะผู้ใช้ออกในเวลาอาหารกลางวันและกลางดึกทุกวัน เมื่อไม่กี่ปีก่อนมีรหัสโปรดักชั่นที่เสถียรจาก Oracle


2

ขออภัยที่จะวางลิงก์บางลิงก์ - แต่เราใช้เทคนิคบางอย่างเพื่อค้นหาหน่วยความจำรั่วโดยใช้ logparser และ PowerShell ดังนั้นฉันจะแชร์

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

(เว็บไซต์ Debugger ไม่ต้องสงสัยเลยว่าเจ้ายอดเยี่ยม): http://blogs.msdn.com/carloc/archive/2007/09/14/something-you-need-to-know-before-stb-.buy.aspx

ฉันจะให้ลิงก์ไปยังข้อมูลเชิงลึกที่ยอดเยี่ยมของ Mark Russinovich ในการใช้งานหน่วยความจำบน Windows:

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

ไม่เปิดเคส Microsoft ที่เกิดขึ้นจริงไซต์ Performance Team มีข้อมูลจำนวนมากเช่นกัน: http://blogs.technet.com/askperf/Default.aspx?p=2


1

เครื่องมือสำคัญที่ช่วยในการวินิจฉัยว่าเป็น perfmon เคาน์เตอร์ที่ฉันดู (เริ่มต้นด้วย) คือ:

หน่วยความจำ, ไบต์ที่ได้รับการยอมรับนี่เป็นการวัดความต้องการสำหรับ
กระบวนการหน่วยความจำเสมือน, ชุดการทำงาน, หน่วยความจำเสมือนทั้งหมด _Total ในการใช้งาน
แฟ้มเพจจิ้ง,% pagefile ที่ใช้
หน่วยความจำ, เพจ / วินาที (นี่ไม่ใช่ตัวบ่งชี้ แม้ว่าทุกคนจะคิดว่ามันเป็นเช่นนั้น)
หน่วยความจำหน้าผลลัพธ์ / วินาทีจำนวนหน้าที่มีหน่วยความจำเสมือนถูกเขียนไปยังไฟล์เพจเพื่อเพิ่มเฟรมหน้า RAM ให้ว่างเพื่อวัตถุประสงค์อื่นในแต่ละวินาที

หน่วยความจำ, แคช
หน่วยความจำไบต์, พูล
หน่วยความจำไบต์ที่ไม่ใช่เพจเพจ
, หน่วยความจำไบต์เพจพูล, รหัสระบบ
หน่วยความจำไบต์ทั้งหมด, ระบบไบต์รวมของไดรเวอร์

เมื่อผลรวมนี้ใกล้ถึง 2GB คุณจะมีปัญหาด้านประสิทธิภาพเนื่องจากสถาปัตยกรรม 32 บิต

หน่วยความจำ, พร้อมใช้งาน MBytes- นี้จะวัดจำนวน RAM ที่มีอยู่เพื่อตอบสนองความต้องการสำหรับหน่วยความจำเสมือน (การจัดสรรใหม่หรือการกู้คืนหน้าจาก pagefile)

ดูเพิ่มเติมที่http://members.shaw.ca/bsanders/WindowsGeneralWeb/RAMVirtualMemoryPageFileEtc.htm


ลิงค์ที่น่าสนใจ บนเซิร์ฟเวอร์นี้ฉันเห็นชุดการทำงานของกระบวนการทั้งหมดที่ 640MB แต่ "Memory, Committed Bytes" คือ 5.4GB ไม่มีเคาน์เตอร์อื่นที่คุณพูดถึงสูงมาก ฉันมักจะได้รับคำเตือน "หมดหน่วยความจำเสมือน" ซึ่งเป็นเหตุผลที่ฉันกำลังตรวจสอบ การเพิ่มความคิดเห็นไปที่ OP
jpdaigle

1

เซิร์ฟเวอร์นั้นใช้งานมานานเท่าไหร่ตั้งแต่รีบูตครั้งล่าสุด มันเป็นความจริงที่โชคร้ายของชีวิตที่ Windows มีหน่วยความจำรั่ว เช่นหน่วยความจำที่จัดสรรไม่ได้รับการปล่อยตัวกลับสู่ระบบเสมอไป อาการเป็นสิ่งที่คุณเห็น หากคุณยังไม่ได้ทำฉันแนะนำให้ทำการบูทอย่างน้อยสัปดาห์ละครั้ง ศูนย์ข้อมูลหลายแห่งรีบูท Windows ทุกวันเพราะจะช่วยลดการโทรติดต่อได้มาก แน่นอนว่าเป็นเรื่องง่ายมากที่จะทำเมื่อคุณใช้กลุ่มเพราะไม่มีเวลาหยุด


0

มันบอกว่ามีดูแลระบบบางแห่งที่เข้าใจสถิติหน่วยความจำของ Windows จริงๆ แต่ฉันไม่เคยเจอเลย

อย่างไรก็ตามมักจะไม่ยากเกินไปที่จะค้นหากระบวนการที่ไม่เหมาะสม ลองใช้ Perfmon เพื่อดูเคาน์เตอร์กระบวนการต่าง ๆ เช่นหมายเลขอ้างอิงหรือข้อบกพร่องของเพจ / วินาที

จูเนียร์

ความคิดเพิ่มเติม: คุณแน่ใจหรือว่าคุณมีหน่วยความจำเหลือน้อย สิ่งสำคัญคือไม่ว่าคุณจะเพจจิ้ง หากไม่มีเพจจิ้งคุณไม่ได้อยู่ในหน่วยความจำสั้น การใช้ PerfMon ดูที่ตัวนับหน่วยความจำ - หน้า / วินาที


ฉันไม่เห็นอะไรชัดเจนในกระบวนการทำงาน มีวิธีใดที่เป็นไปได้ที่หน่วยความจำจะไม่ถูกเรียกคืนโดยระบบปฏิบัติการหลังจากกระบวนการออกจากกระบวนการหรือไม่? นี่คือเซิร์ฟเวอร์ทดสอบสร้าง / หน่วยอัตโนมัติเพื่อแน่นอนกระบวนการผิดพลาดตลอดเวลาที่มันเคยทำงานมีเลือดออกที่ทันสมัยสร้างสร้างขึ้นจาก SVN โดยอัตโนมัติ
jpdaigle

ดูการแก้ไขของฉันสำหรับความคิดบางอย่างเพิ่มเติม
John Rennie

0

จำไว้ว่าชุดการทำงานเป็นบิตของหน่วยความจำที่แสดงโดยหน่วยความจำกายภาพจริง คุณมีค่าใช้จ่ายหน่วยความจำเสมือนของคุณและ Windows ทำการแชร์หน้าโค้ดบางส่วนของ MFC จะถูกแชร์ระหว่างกระบวนการมากมายโดยไม่ต้องใช้หน่วยความจำที่ซ้ำกัน นอกจากนี้คุณยังมีความต้องการ Windows อย่างต่อเนื่องที่จะทำให้แคชของระบบไฟล์มีขนาดใหญ่ที่สุดเท่าที่จะเป็นไปได้ (ฉันเคยเห็นมันพุ่งขึ้นถึง 800MB บนแล็ปท็อป 2.5GB มาก่อน)

การจัดการหน่วยความจำ Windows มีประสิทธิภาพมาก อย่างไรก็ตามเมื่อ Windows เริ่มการเพจสิ่งต่าง ๆ น่าเกลียดและคุณต้องออกจากที่ว่างสำหรับแคชของระบบแฟ้มเสมอทุกครั้ง ฉันต้องปิดตัวเองเป็นประจำและเริ่ม Firefox ใหม่เมื่อแท็บ 80+ ของฉันขับเคลื่อนการใช้งานหน่วยความจำมากถึง 1.2gb / 1.2 + gb

Windows ยังเบลอบรรทัดเล็กน้อยระหว่างหน้าต่างๆที่อยู่ในแคชและหน้าเว็บที่ระบุว่าเป็นหน่วยความจำ / ชุดการทำงาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.