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

2023-09-18 16:43:51

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

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

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

查询磁盘写入量

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

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

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

写一个 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")

定时任务的设置参考: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
更多推荐

在家访问校园网内网,异地用校园网上知网

具体思路,使用tailscale连接校园网安装了代理服务的服务器(这里以centos7.6为服务端),windows10为客户端(家里的电脑),用tailscale连接两个设备,内网穿透。记住两个设备的ip,然后再用windows连centos的代理,我一般用ssr,ssr的服务端搭建发不出来,就不说了(我后期考虑在个

Iterator设计模式

目录1、示例1.1Aggregate接口1.2Iterator接口1.3Book类1.4BookShelf类1.6BookShelfIterator类1.7Main类2、解释Iterator模式中的角色2.1Iterator模式的存在意义2.2抽象类和接口2.3Aggregate和Iterator的对应2.4容易弄错"

Java学习笔记——字符串

字符串(String)是用一对双引号括起来的零个或多个字符组成的有限序列。在Java中,字符串被当作对象/类来处理。程序中需要用到的字符串可以分为:String类:不可变字符串类,如果修改系统会自动创建新的对象;StringBuffer类:可变字符串类,多线程;StringBuilder类:可变字符串类,单线程;串的两

Jtti:ubuntu如何扩展磁盘空间

在Ubuntu上扩展磁盘空间通常涉及到对文件系统和分区进行调整。以下是一些常见的方法来扩展磁盘空间:注意:在执行任何磁盘扩展操作之前,请务必备份您的数据,以防意外发生。使用GParted(图形界面方法):GParted是一个强大的分区编辑工具,可以用于扩展磁盘空间。首先,您需要确保您的虚拟机或物理机已经添加了额外的磁盘

软件设计模式系列之九——桥接模式

1模式的定义桥接模式是一种结构型设计模式,它用于将抽象部分与其实现部分分离,以便它们可以独立地变化。这种模式涉及一个接口,它充当一个桥,使得具体类可以在不影响客户端代码的情况下改变。桥接模式将继承关系转化为组合关系,从而减少类之间的紧密耦合度,使得系统更加灵活和可扩展。桥接模式的核心思想是将系统中的多个维度的变化解耦,

好物周刊#8:开源镜像站

村雨遥的好物周刊,记录每周看到的有价值的信息,主要针对计算机领域,每周五发布。一、项目1.ChatGPTWeb用Express和Vue3搭建的ChatGPT演示网页,支持双模型,提供了两种非官方ChatGPTAPI方法。ChatGPTAPI使用gpt-3.5-turbo通过OpenAI官方API调用ChatGPTCha

前后端分离管理系统day01---Springboot+MybatisPlus

目录目录软件基础知识一创建后端项目注意:删除多余项创建测试类二加入mybatis-plus依赖支持1.加入依赖码2.创建数据库实例/创建用户表/插入默认数据创建数据库实例创建表插入数据3.配置yml文件注意:wms01必须是数据库的名字,后端手动配置端口8090,防止前端访问8080时和后端冲突4.编写测试代码①创建e

RabbitMQ生产故障问题分析

1.问题引发由某个服务BI-collector-xx队列出现阻塞,影响很整个rabbitMQ集群服务不可用,多个应用MQ生产者服务出现假死状态,系统影响面较广,业务影响很大。当时为了应急处理,恢复系统可用,运维相对粗暴的把一堆阻塞队列信息清空,然后重启整个集群。在复盘整个故障过程中,我心中有不少疑惑,至少存在以下几个问

GPT引领前沿与应用突破之GPT4科研实践技术与AI绘图

GPT对于每个科研人员已经成为不可或缺的辅助工具,不同的研究领域和项目具有不同的需求。如在科研编程、绘图领域:1、编程建议和示例代码:无论你使用的编程语言是Python、R、MATLAB还是其他语言,都可以为你提供相关的代码示例。2、数据可视化:生成各种类型的数据可视化图表,如折线图、柱状图、散点图、饼图、热力图等。提

Python中两个最常用的单元测试框架unittest和pytest

这篇文章的主要目的是讨论Python中两个最常用的单元测试框架unittest和pytest,它们的优缺点以及在何时选择哪个框架。PythonunittestvsPytest在编写任何软件时,我们必须在开发过程中保持错误检查的过程。这确保了一旦软件达到发布阶段,在使用过程中遇到的错误数量最小。Python也有各种测试框

北京君正应用案例:联想新款Yoga Book 9i亮相 CES

国际消费电子展(CES),被誉为年度消费电子行业“风向标”。在今年CES2023上,联想旗下多款创新产品正式亮相,带来最前沿的趋势与技术体验。特别是新款YogaBook9i的发布,采用了双面13英寸OLED屏的设计,可以一起用作大型平板电脑,也可以与可连接的蓝牙键盘配对,用作双屏笔记本电脑。YogaBook9i能够帮助

热文推荐