• MacOS 控制固态磁盘写入量,设置定时任务监控


    M1 芯片的内存交换策略非常激进,导致 内存较小的机型 固态硬盘写入量十分恐怖,网上很多人都有类似的遭遇。

    如何看待 8G 256G M1 MacBook Air 使用一个月硬盘写入 22TB+?

    固态硬盘是有擦除、写入寿命的,一般就按100次算,256G 大概就是 250TB。当然,并不是说超过这个数,硬盘就坏了,只是一般超过这个数,再坏,厂商就不包了。具体不同型号、不同厂商也会给不同的 TBW (Total Bytes Written)

    查询磁盘写入量

    1. 安装磁盘工具smartmontools:
    brew install smartmontools
    
    • 1
    smartctl -a disk0
    
    • 1

    Data Units Written 就是磁盘写入量,10个月左右的写入量 39 T

    === START OF SMART DATA SECTION ===
    SMART overall-health self-assessment test result: PASSED
    
    SMART/Health Information (NVMe Log 0x02)
    Critical Warning:                   0x00
    Temperature:                        34 Celsius
    Available Spare:                    100%
    Available Spare Threshold:          99%
    Percentage Used:                    2%
    Data Units Read:                    127,486,481 [65.2 TB]
    Data Units Written:                 76,316,904 [39.0 TB]
    Host Read Commands:                 1,790,447,762
    Host Write Commands:                694,652,609
    Controller Busy Time:               0
    Power Cycles:                       197
    Power On Hours:                     934
    Unsafe Shutdowns:                   8
    Media and Data Integrity Errors:    0
    Error Information Log Entries:      0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    设置定时任务监控磁盘写入量

    写一个 python 脚本 smart-daily.py,放在合适的位置,log 的目录,自己看着改。

    chmod+x smart-daily.py 添加执行权限。第一行不能删,否则不能直接 smart-daily.py 执行。

    #!/usr/bin/env python
    import os
    import time
    import re
    
    command_result = os.popen("smartctl -a disk0").read()
    lines = command_result.splitlines()
    
    for line in lines:
        if line.find("Data Units Written") != -1:
            # print(line)
            start_index = re.search(r"\d", line).start()
            line = line[start_index:]
            with open('DataWritten.log', mode='a', encoding='utf-8') as f:
                f.write(time.strftime("%Y-%m-%d %H:%M:%S: ",
                        time.localtime()) + line + "\n")
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    定时任务的设置参考:mac 定时执行python脚本

    如何减少磁盘写入量?

    根本的办法是加钱买更大内存,此外,以下几种方法

    注意保护

    实测一段时间,上面的方法都一般,无法根治这个问题,我也是买之前没做足功课,入手了丐版 8+256 Macbook,日常就是用用 Edge,IDEA,Pycharm,不到一年时间固态写了将近40T。

    只能自己没事多留心,别同时开太多吃内存的软件,用不到的软件就 Command+Q 。

    外接固态

    外接一个固态硬盘,下载的东西都直接存入固态中,但对正常用户来说,这并不是磁盘写入量的罪魁祸首。

    减小 WindowServer 内存占用

    占用过多mac内存的WindowServer是什么

    关闭虚拟内存

    即使关闭了虚拟内存,也不会影响系统稳定性,因为超过阈值又会继续使用虚拟内存,其实效果并不是很好,开个 IDEA 内存就飚起来了。但关闭后就可以在没必要的情况下不去使用虚拟内存。

    M1关闭虚拟内存(交换内存 swap memory) 防止SSD磨损

    关闭 Spotlight 索引

    https://www.v2ex.com/t/874851

    但直接关闭索引对正常使用太影响了,比较折中的办法是设置一个 crontab 定时任务,每天允许 Spotlight 索引一个小时。

    Disable spotlight indexing on macOS to heavily speed up Virtual Instances.
    # massively increase virtualized macOS by disabling spotlight.
    sudo mdutil -i off -a
    
    # since you can't use spotlight to find apps, you can renable with
    # sudo mdutil -i on -a
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    Git操作
    【面试题】JSON.stringify()妙用,你真的知道吗?
    跨站脚本攻击(XSS):为什么Cookie中有HttpOnly属性?
    1457. Pseudo-Palindromic Paths in a Binary Tree
    如何实现Cloneable接口?深拷贝和浅拷贝的区别?
    这才是华为手机正确处理垃圾的方法,这样做能不卡机
    Elasticsearch安全又双叒叕出问题? 搜索引擎该怎么选
    CMU15445 (Fall 2020) 数据库系统 Project#1 - Buffer Pool 详解
    JavaScript奇淫技巧:清理无效的垃圾代码
    基于SpringBoot开发的疫情信息管理系统
  • 原文地址:https://blog.csdn.net/caozicheng1999/article/details/126967621