ฉันใช้ High Sierra บน MacBook Pro พร้อม RAM ขนาด 16GB กับ SSD
มีไฟล์ swap 15G มีวิธีใดในการเพิ่มพื้นที่ / ไฟล์ swap โดยไม่ต้องรีสตาร์ท?
$ sysctl -a | grep swap
vm.swapusage: total = 15360.00M used = 14468.75M free = 891.25M (encrypted)
vm.compressor_swapout_target_age: 0
vm.swapfileprefix: /private/var/vm/swapfile
debug.intel.swapCount: 0
$ ll -h /var/vm/swap*
-rw------- 1 root wheel 1.0G Apr 30 16:10 /var/vm/swapfile0
-rw------- 1 root wheel 1.0G Apr 30 17:16 /var/vm/swapfile1
-rw------- 1 root wheel 1.0G May 11 21:28 /var/vm/swapfile10
-rw------- 1 root wheel 1.0G May 11 21:46 /var/vm/swapfile11
-rw------- 1 root wheel 1.0G May 11 22:04 /var/vm/swapfile12
-rw------- 1 root wheel 1.0G May 11 23:00 /var/vm/swapfile13
-rw------- 1 root wheel 1.0G May 11 23:01 /var/vm/swapfile14
-rw------- 1 root wheel 1.0G May 11 23:02 /var/vm/swapfile15
-rw------- 1 root wheel 1.0G May 2 12:45 /var/vm/swapfile2
-rw------- 1 root wheel 1.0G May 4 14:02 /var/vm/swapfile3
-rw------- 1 root wheel 1.0G May 4 05:50 /var/vm/swapfile4
-rw------- 1 root wheel 1.0G May 8 11:05 /var/vm/swapfile5
-rw------- 1 root wheel 1.0G May 9 16:18 /var/vm/swapfile6
-rw------- 1 root wheel 1.0G May 10 03:02 /var/vm/swapfile7
-rw------- 1 root wheel 1.0G May 11 13:03 /var/vm/swapfile8
-rw------- 1 root wheel 1.0G May 11 21:07 /var/vm/swapfile9
ฉันต้องการวางไฟล์เหล่านี้โดยไม่ปิดการใช้งาน dynamic_pager
.
ฉันพยายาม:
- วิ่ง
sudo purge
(บังคับให้ล้างแคชดิสก์); - ออกจากแอพทั้งหมดที่ฉันไม่ได้ใช้
หลอกลวงระบบโดยการสร้างไฟล์สลับจำลองก่อนสร้าง:
cd /var/vm sudo touch swapfile{0..20} 2>/dev/null; sudo chmod 000 swapfile{0..20} 2>/dev/null
แต่มันไม่ทำงานเนื่องจากระบบยังคงสร้าง / เปลี่ยนแปลงไฟล์แม้จะมี
000
การอนุญาตแปลก ๆ
ด้วยเหตุผลบางอย่าง, htop
แสดงหน่วยความจำเสมือนเป็น 532G แต่ฉันเชื่อว่าเป็นข้อบกพร่อง top
กำลังแสดงการใช้งานน้อยลง
ข้างบน htop
/ top
แสดงเพียง 2 งานที่กำลังทำงาน 445 กำลังนอนหลับ CPU ไม่ได้ใช้มากขนาดนั้น แต่เคอร์เนลไม่ว่างกับการสลับระหว่างไฟล์ 15G
ฉันสามารถรีสตาร์ทได้ แต่หลังจากผ่านไปสองสามวันปัญหานี้จะเกิดขึ้นซ้ำทุกสัปดาห์ เป็นการดีที่ฉันต้องการฆ่าและทำลาย (ลบ) สลับไฟล์และเริ่มต้นอีกครั้งในการรันเดียวกัน แต่ macOS ไม่อนุญาตให้ฉันทำ
$ sudo rm -fr swapfile*
Password:
rm: cannot remove 'swapfile0': Operation not permitted
มีแฮ็กใด ๆ ที่สามารถบังคับใช้ได้หรือไม่ dynamic_pager
จะวางไฟล์เหล่านี้ได้อย่างไร ฉันไม่ต้องการอะไรมาก
Btw ไฟล์ swap เหล่านี้ว่างเปล่า! ดู:
$ sudo strings swapfile*
swapfile0
swapfile1
swapfile10
swapfile11
swapfile12
swapfile13
swapfile2
swapfile3
swapfile4
swapfile5
swapfile6
swapfile7
swapfile8
swapfile9
/var/vm$ sudo gzip swapfile*
/var/vm $ ll -h *.gz
-rw------- 1 root wheel 1.6M Apr 30 16:10 swapfile0.gz
-rw------- 1 root wheel 1.6M Apr 30 17:16 swapfile1.gz
-rw------- 1 root wheel 1.6M May 11 21:28 swapfile10.gz
-rw------- 1 root wheel 1.6M May 11 21:46 swapfile11.gz
-rw------- 1 root wheel 1.6M May 11 22:04 swapfile12.gz
-rw------- 1 root wheel 1.6M May 11 23:00 swapfile13.gz
-rw------- 1 root wheel 1.6M May 2 12:45 swapfile2.gz
-rw------- 1 root wheel 1.6M May 4 14:02 swapfile3.gz
-rw------- 1 root wheel 1.6M May 4 05:50 swapfile4.gz
-rw------- 1 root wheel 1.6M May 8 11:05 swapfile5.gz
-rw------- 1 root wheel 1.6M May 9 16:18 swapfile6.gz
-rw------- 1 root wheel 1.6M May 10 03:02 swapfile7.gz
-rw------- 1 root wheel 1.6M May 11 13:03 swapfile8.gz
-rw------- 1 root wheel 1.6M May 11 21:07 swapfile9.gz
หากสิ่งเหล่านี้ว่างเปล่าเหตุใด macOS จึงไม่สามารถลบออกได้ ฉันค่อนข้างมั่นใจว่าความเชื่องช้าของระบบ (เช่น load avg และรวมถึงการตรึงเมาส์บ่อย) เกิดจากการสร้างและลบไฟล์เหล่านี้อย่างต่อเนื่องเนื่องจากฉันไม่มีกระบวนการอื่นใดที่ใช้ CPU มาก
ตัวอย่างเช่นก่อนที่จะเขียนโพสต์นี้ฉันมีไฟล์ swap 13G (1G ต่อไฟล์) ในระหว่างที่เขียนและวางเอาท์พุทข้างบนฉันลงเอยด้วย 15G (โดยไม่ทำอะไรเลย) จากนั้น macOS จะลบจริงๆ swapfile14
และ swapfile15
(เช่น 13G of swap) เมื่อเขียนสิ่งนี้ จากนั้นนำออก swapfile13
เมื่อเขียนประโยคนี้ จากนั้นสร้างขึ้นมาเพื่อ swapfile16
(16G) เมื่อเขียนประโยคนี้ และลบออก swapfile16
อีกครั้งเมื่อเขียนประโยคนี้ และอื่น ๆ ช่างเป็นระเบียบ หากไฟล์เหล่านี้เป็นไฟล์ที่ว่างเปล่าเหตุใด macOS จึงสร้างไฟล์เหล่านั้นต่อเมื่อมันไม่ได้เติมอะไรเลย
ข้อมูลอื่น ๆ :
$ sudo launchctl list | grep pager
- 0 com.apple.dynamic_pager
$ launchctl print system | grep dynamic_pager
0 0 com.apple.dynamic_pager
$ ps wuax | grep dynamic_pager
# No running?!
$ launchctl dumpstate | grep -A20 com.apple.dynamic_pager
0 0 com.apple.dynamic_pager
--
com.apple.dynamic_pager = {
active count = 0
path = /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
state = waiting
program = /sbin/dynamic_pager
arguments = {
/sbin/dynamic_pager
}
default environment = {
PATH => /usr/bin:/bin:/usr/sbin:/sbin
}
environment = {
XPC_SERVICE_NAME => com.apple.dynamic_pager
}
domain = com.apple.xpc.launchd.domain.system
minimum runtime = 10
exit timeout = 5
runs = 1
successive crashes = 0
excessive crashing = 0
last exit code = 0
นี่คือตัวอย่าง 1 วินาทีของ WindowServer
กระบวนการที่ใช้เวลาอย่างน้อยครึ่งวินาทีในการสลับ:
Command: WindowServer
Parent: launchd [1]
Duration: 1.01s
Steps: 10 (100ms sampling interval)
Active cpus: 8
Fan speed: 2159 rpm
Thread 0x1ab Thread name "VM_cswap_trigger" 10 samples (1-10) priority 91 (base 91) cpu time 0.222s
<IO tier 0>
*10 call_continuation + 23 (kernel + 2098423) [0xffffff80004004f7] 1-10
*10 ??? (kernel + 2882629) [0xffffff80004bfc45] 1-10
*6 ??? (kernel + 2883102) [0xffffff80004bfe1e] 1-6
*6 thread_block_reason + 175 (kernel + 2530911) [0xffffff8000469e5f] 1-6
*6 ??? (kernel + 2534903) [0xffffff800046adf7] 1-6
*6 machine_switch_context + 205 (kernel + 3578125) [0xffffff800056990d] 1-6
*1 ??? (kernel + 2883122) [0xffffff80004bfe32] 7
*1 ??? (kernel + 2885317) [0xffffff80004c06c5] 7
*1 c_seg_do_minor_compaction_and_unlock + 303 (kernel + 2886351) [0xffffff80004c0acf] 7
*1 c_seg_minor_compaction_and_unlock + 344 (kernel + 2887576) [0xffffff80004c0f98] (running) 7
*2 ??? (kernel + 2883102) [0xffffff80004bfe1e] 8-9
*2 thread_block_reason + 175 (kernel + 2530911) [0xffffff8000469e5f] 8-9
*2 ??? (kernel + 2534903) [0xffffff800046adf7] 8-9
*2 machine_switch_context + 205 (kernel + 3578125) [0xffffff800056990d] 8-9
*1 ??? (kernel + 2883122) [0xffffff80004bfe32] 10
*1 ??? (kernel + 2885317) [0xffffff80004c06c5] 10
*1 c_seg_do_minor_compaction_and_unlock + 303 (kernel + 2886351) [0xffffff80004c0acf] 10
*1 c_seg_minor_compaction_and_unlock + 633 (kernel + 2887865) [0xffffff80004c10b9] 10
*1 kernel_memory_depopulate + 194 (kernel + 2976354) [0xffffff80004d6a62] 10
*1 pmap_remove_options + 1124 (kernel + 3488404) [0xffffff8000553a94] 10
*1 pmap_remove_range_options + 1988 (kernel + 3485812) [0xffffff8000553074] (running) 10
Thread 0x1ac Thread name "VM_compressor" 10 samples (1-10) priority 91 (base 91) cpu time 0.201s
<IO tier 0>
*6 call_continuation + 23 (kernel + 2098423) [0xffffff80004004f7] 1-6
*6 vm_pageout_iothread_internal_continue + 1129 (kernel + 3134345) [0xffffff80004fd389] 1-6
*6 vm_pageout_compress_page + 268 (kernel + 3135052) [0xffffff80004fd64c] 1-6
*6 vm_compressor_pager_put + 160 (kernel + 2903904) [0xffffff80004c4f60] 1-6
*6 vm_compressor_put + 1389 (kernel + 2900045) [0xffffff80004c404d] 1-6
*1 WKdm_compress_new + 736 (kernel + 2092960) [0xffffff80003fefa0] (running) 1
*1 WKdm_compress_new + 776 (kernel + 2093000) [0xffffff80003fefc8] (running) 2
*1 WKdm_compress_new + 781 (kernel + 2093005) [0xffffff80003fefcd] (running) 3
*1 WKdm_compress_new + 303 (kernel + 2092527) [0xffffff80003fedef] (running) 4
*1 WKdm_compress_new + 748 (kernel + 2092972) [0xffffff80003fefac] (running) 5
*1 WKdm_compress_new + 771 (kernel + 2092995) [0xffffff80003fefc3] (running) 6
*1 vm_pageout_iothread_internal_continue + 0 (kernel + 3133216) [0xffffff80004fcf20] 7
*1 call_continuation + 23 (kernel + 2098423) [0xffffff80004004f7] 8
*1 vm_pageout_iothread_internal_continue + 1129 (kernel + 3134345) [0xffffff80004fd389] 8
*1 vm_pageout_compress_page + 268 (kernel + 3135052) [0xffffff80004fd64c] 8
*1 vm_compressor_pager_put + 127 (kernel + 2903871) [0xffffff80004c4f3f] (running) 8
*2 vm_pageout_iothread_internal_continue + 0 (kernel + 3133216) [0xffffff80004fcf20] 9-10
Thread 0x1ad Thread name "VM_compressor" 10 samples (1-10) priority 91 (base 91) cpu time 0.144s
<IO tier 0>
*3 call_continuation + 23 (kernel + 2098423) [0xffffff80004004f7] 1-3
*3 vm_pageout_iothread_internal_continue + 1129 (kernel + 3134345) [0xffffff80004fd389] 1-3
*3 vm_pageout_compress_page + 268 (kernel + 3135052) [0xffffff80004fd64c] 1-3
*3 vm_compressor_pager_put + 160 (kernel + 2903904) [0xffffff80004c4f60] 1-3
*3 vm_compressor_put + 1389 (kernel + 2900045) [0xffffff80004c404d] 1-3
*1 WKdm_compress_new + 280 (kernel + 2092504) [0xffffff80003fedd8] (running) 1
*1 WKdm_compress_new + 286 (kernel + 2092510) [0xffffff80003fedde] (running) 2
*1 WKdm_compress_new + 309 (kernel + 2092533) [0xffffff80003fedf5] (running) 3
*1 vm_pageout_iothread_internal_continue + 0 (kernel + 3133216) [0xffffff80004fcf20] 4
*2 call_continuation + 23 (kernel + 2098423) [0xffffff80004004f7] 5-6
*1 vm_pageout_iothread_internal_continue + 1187 (kernel + 3134403) [0xffffff80004fd3c3] 5
*1 vm_page_free_list + 124 (kernel + 3219628) [0xffffff80005120ac] 5
*1 vm_page_free_prepare_object + 146 (kernel + 3207826) [0xffffff800050f292] (running) 5
*1 vm_pageout_iothread_internal_continue + 1129 (kernel + 3134345) [0xffffff80004fd389] 6
*1 vm_pageout_compress_page + 304 (kernel + 3135088) [0xffffff80004fd670] (running) 6
*4 vm_pageout_iothread_internal_continue + 0 (kernel + 3133216) [0xffffff80004fcf20] 7-10