แอปพลิเคชั่น Mac ที่ให้มามีการแลกเปลี่ยนเท่าไหร่ใช้?


15

มีวิธีใดบ้างที่จะบอกได้ว่ามีแอปพลิเคชันบางตัวที่ทำงานบน Mac OSX (10.2+) มีการสลับหน่วยความจำบางส่วน (เช่นเป็นหนึ่งใน/private/var/vm/swapfile*ไฟล์) หรือไม่? และเท่าไหร่

เงินรางวัล (150 rps)

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


นี่เป็นคำถามที่ไม่ดี จำนวนที่คุณกำลังมองหาจะเปลี่ยนเพราะคุณพยายามวัด (คิดว่าหลักการความไม่แน่นอนของไฮเซนเบิร์ก) ยิ่งไปกว่านั้นมันจะเปลี่ยนแปลงตลอดเวลาขึ้นอยู่กับแอพพลิเคชั่นอื่น ๆ และข้อกำหนดหน่วยความจำรูปแบบ io และลำดับความสำคัญของกระบวนการ หากคุณพบจำนวนมันจะไม่ทำอะไรให้คุณดีจนกว่าคุณจะแก้ไขรหัส OS เพราะมีเพียงเล็กน้อยที่คุณจะทำจากมุมมองของแอปพลิเคชันเพื่อเปลี่ยน
gavaletz

3
@gavaletz: ออกจากเตียงผิดไปเช้านี้เหรอ? ฉันต้องการชนิดของการทำโปรไฟล์ swap ที่ Linux สามารถทำได้โดยใช้ / proc / $ pid / smaps ฉันมักจะสามารถระบุกิจกรรมการแลกเปลี่ยนอย่างกะทันหันโดยใช้หูของฉันดังนั้นฉันจึงไม่ใส่ใจกับหลักการความไม่แน่นอนของ gavaletz มากเกินไป
Charles Stewart

คำตอบ:


13

ฉัน googling มาก ;-) เท่าที่ฉันเข้าใจมันหน่วยความจำเสมือนของกระบวนการที่กำหนดนั้นแบ่งออกเป็นหน้าต่างๆที่จัดการโดยระบบปฏิบัติการและนำเสนอต่อแอปพลิเคชันราวกับว่าเป็น RAM

ใน OS X บนพื้นฐานของ Mach dynamic_pagerเคอร์เนลนี้จะถูกจัดการโดยภูตที่เรียกว่า กระบวนการนี้สร้าง swapfile ใน/private/var/vmขณะที่คุณพูดถึง swapfiles เหล่านี้ไม่ได้ถูกสร้างขึ้นในแต่ละแอปพลิเคชัน แต่เป็นพื้นฐาน "ต้องการหน่วยความจำ" swapfiles นั้นแบ่งออกเป็นหน้า ๆ ละ 4096 bytes และหน้านั้นจะถูกจัดสรรให้กับกระบวนการที่ (ระบบปฏิบัติการนั้นถือว่า) ต้องการหน่วยความจำเสมือน ดังนั้นคุณไม่สามารถเชื่อมโยง swapfile กับแอปพลิเคชันที่กำหนด แต่คุณสามารถดูจำนวนหน้าของกระบวนการที่กำหนดได้

คุณอาจต้องการลองคำสั่งvm_statใน Termial สิ่งนี้จะช่วยให้คุณทราบถึงสถิติการใช้งาน VM (โปรดทราบว่าจำนวนหน้า 'ขนาดหน้า' เวลาที่ใช้งานเท่ากับขนาดของ swapfile ของคุณ) สิ่งนี้ยังอธิบายว่าทำไมคุณสามารถมีหลายกระบวนการโดยใช้ VM แต่มีเพียงไม่กี่ swapfiles

คำสั่งสนุกอื่น ๆ ที่มีและvmmap [process id]pagestuff


อย่างไรก็ตามลองดูdeveloper.apple.com/mac/library/documentation/Darwin/Conceptual/หากคุณต้องการทราบข้อมูลเพิ่มเติม
trolle3000

สิ่งนี้ดูมีแนวโน้ม นี่ดูเหมือนจะให้คำตอบที่ชัดเจนในส่วนแรกของคำถามและเป็นคำแนะนำที่เป็นรูปธรรมในส่วนที่สอง ฉันต้องขุดต่อไป ...
Charles Stewart

ไม่ใช่vmmap [pid]หรือvmmap -pages [pid]คำตอบสำหรับส่วนที่สองของคำถามของคุณ?
trolle3000

vmmap $ pid ไม่ได้ให้ข้อมูลที่ชัดเจนเกี่ยวกับสิ่งที่มันจัดเป็นภูมิภาคที่เขียนได้ มันไม่ได้แยกความแตกต่างระหว่างการจัดสรร (เช่น. ชนิดถอดเปลี่ยนได้) และหน่วยความจำที่สลับเปลี่ยนสำหรับภูมิภาคแบบอ่านอย่างเดียว, แต่บางทีอาจมีความแตกต่างไม่ได้สำคัญนัก ฉันจะยอมรับคำตอบนี้ในวันพรุ่งนี้
Charles Stewart

5

vmmap PIDคำสั่งควรให้สถิติเป็นประโยชน์บางอย่างในตัวเลขเกี่ยวกับกระบวนการที่กำหนด


แม้ vmmap [AppName] ใช้งานได้
Studer

4

จากความคิดที่โพสต์ที่นี่ฉันได้สร้างโค้ดขึ้นมาเล็กน้อย:

sudo vmmap notifyd | grep -A3 'Summary'

ซึ่งแสดงส่วนข้อมูลสรุป (3 บรรทัด) ของเอาต์พุต vmmap ฉันใช้notifydในตัวอย่างนี้ แต่คุณสามารถแทนที่ด้วย PID ใด ๆ ที่คุณรู้

บรรทัดนี้จะพยายามแสดงรายการบรรทัดสรุปทั้งหมดของกระบวนการที่กำลังทำงานอยู่ทั้งหมด เห็นได้ชัดว่าบางอย่างจะล้มเหลวเนื่องจากรหัสกระบวนการของพวกเขาหายไปแล้ว (กระบวนการสิ้นสุดลง) แต่โดยทั่วไปฉันพบว่านี่เป็นวิธีที่ดีในการเลื่อนดูรายการข้อมูลหน่วยความจำและมองหา swapper ด้านบน

ps -o pid= -xa | awk '{print $1}' | xargs -n 1 sudo vmmap | grep -A3 'Summary'

แก้ไข: ผู้ใช้นิรนามบางคนเห็นบรรทัดคำสั่งสุดท้ายนี้ต้องการการปรับปรุงเพราะเห็นได้ชัดว่าตัวแปรดั้งเดิมไม่ทำงานอีกต่อไป ขอบคุณมาก ๆ ไม่ว่าคุณจะเป็นใครและฉันขอโทษที่การแก้ไขของคุณถูกปฏิเสธ (คำสั่งแรกก่อนหน้านี้อ่าน 'ps xa' และส่งผลให้ vmmap ล้มเหลวเนื่องจากพาดหัวของ ps ถูกโยนทิ้งไป)

การปรับปรุงเพิ่มเติม: หากคุณต้องการทราบชื่อของโปรแกรมในทันทีให้ใช้การเปลี่ยนแปลงเล็กน้อยนี้

ps -o pid= -xa | awk '{print $1}' | xargs -n 1 sudo vmmap | egrep 'swapped_out|Path'

การแก้ไขเล็กน้อยในส่วนอื่น ๆ ของคำสั่งนี้ช่วยให้คุณสามารถกรองชื่อโปรแกรมบางอย่างหรือส่วนประกอบของเส้นทางบรรทัดคำสั่ง ที่นี่เรากำลังดูกระบวนการทั้งหมดจาก 'Library / PrivateFrameworks' เท่านั้น

ps -o pid,command= -xa | grep 'Library/PrivateFrameworks' | awk '{print $1}' | xargs -n 1 sudo vmmap |

ฉันได้รับความล้มเหลวมากมายโดยบอกว่า vmmap ไม่สามารถเปิดตัวเป็นแบบ 32-but process ซึ่งหยุด xargs ps -o pid= -xa | awk '{print $1}' | xargs -n 1 -I{} bash -c ‘sudo vmmap {} || true’ | egrep 'swapped_out|^Path:|^Process:'ที่จะได้รับบัตรเพื่อดำเนินการต่อผม มันยังคงไม่หยุดที่ ctrl + c แต่ก็ไม่ได้หยุดที่ข้อผิดพลาด vmmap
ShadSterling

0

เปิดการตรวจสอบกิจกรรมในโฟลเดอร์ / Applications / Utilities ของคุณและมีคอลัมน์หน่วยความจำเสมือนที่จะบอกคุณนี้ คุณสามารถคลิกที่ส่วนหัวหน่วยความจำเสมือนเพื่อเรียงลำดับตามแอปพลิเคชันส่วนใหญ่หรืออย่างน้อยที่สุด ตรวจสอบให้แน่ใจว่าได้เปลี่ยนกระบวนการของฉันเป็นกระบวนการทั้งหมดและโปรดทราบว่าแอปพลิเคชันหนึ่งอาจมีหลายกระบวนการ ตัวอย่างเช่นแอปพลิเคชันบุคคลที่สาม Little Snitch ประกอบด้วย "Little Snitch Network Monitor" และ "Little Snitch UIAgent"


4
มันผิด คอลัมน์ nubmer ในหน่วยความจำเสมือนคือผลรวมของหน่วยความจำในปัจจุบันใน RAM และสลับไฟล์ไฟล์ mmaped และฉันไม่รู้อะไรเลย
Tadeusz A. Kadłubowski

คุณแน่ใจไหม? Apple ไม่ได้กล่าวถึงมันsupport.apple.com/kb/TA20517
ridogi

1
หมายเลข VM วัดจำนวนที่จัดสรร แต่ยังไม่ได้ใช้จริง ไฟล์สลับจะมีสิ่งที่ใช้งานจริง
Chealion

@Chealion: คุณจะกำหนดหน่วยความจำที่จัดสรร แต่ไม่ได้ใช้จริงได้อย่างไร?
Tadeusz A. Kadłubowski

@tkadlubo: ในกรณีนี้ความเชื่อของฉันคือว่ามันเป็นเพียงความแตกต่างระหว่างขนาด VM ที่ระบุไว้พร้อมใช้งานสำหรับกระบวนการเมื่อเทียบกับหน้าจริง, เพจออกไปยังดิสก์ ฉันไม่แน่ใจว่าจะกำหนดได้อย่างไรนอกเหนือจากการสังเกตว่าหมายเลข VM และไฟล์สลับบนดิสก์นั้นแตกต่างกัน
Chealion

0

ดังที่ ridogi กล่าวเปิดการตรวจสอบกิจกรรม นำทางไปยังกระบวนการที่คุณต้องการตรวจสอบและคลิก ... ตรวจสอบ! จากนั้นคลิกหน่วยความจำ สิ่งนี้จะบอกคุณว่ามีการสลับกระบวนการที่ใช้

มีความสุข!


3
หน้าการตรวจสอบจะบอกทุกสิ่งที่น่าสนใจที่มีความสัมพันธ์เชิงบวกกับสิ่งที่คำตอบของคำถามคือ #pagefaults #pageins และรายชื่อไฟล์ mmapped แต่ไม่มีคำตอบที่แท้จริงสำหรับคำถามที่ฉันเป็น
Charles Stewart
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.