วิธีเพิ่มพื้นที่สว็อปด้วยตนเองโดยไม่ต้องรีสตาร์ท?


8

ฉันใช้ 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 vs top, PID USER PRI  NI  VIRT   RES S CPU% MEM%   TIME+  Command, swap, memory, CPU, macOS

ข้างบน 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

คุณแสดงงานของคุณในสิ่งที่เกี่ยวกับผู้ใช้คนอื่น ๆ มอนิเตอร์กิจกรรมแสดงอะไร?
Mark

คำตอบ:


-1

สำหรับวิธีแก้ปัญหาการรีสตาร์ท / สังหารกระบวนการ WindowServer ช่วยชั่วคราว:

# sudo pkill -HUP -u _windowserver

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


ในการตรวจสอบสิ่งที่สร้าง / อัพเดตไฟล์ swap เหล่านี้ให้เรียกใช้:

$ sudo fs_usage | grep swapfile

หรือสำหรับหน้า ins / outs รัน:

$ sudo fs_usage | grep PAGE_

เพื่อดูว่าอะไร WindowServer กระบวนการทำงานตรงตามที่เรียกใช้:

$ sudo spindump -reveal $(pgrep WindowServer)

หรือสำหรับ kernel_task, วิ่ง:

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