惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Proofpoint News Feed
博客园_首页
WordPress大学
WordPress大学
大猫的无限游戏
大猫的无限游戏
有赞技术团队
有赞技术团队
阮一峰的网络日志
阮一峰的网络日志
Hugging Face - Blog
Hugging Face - Blog
博客园 - 【当耐特】
酷 壳 – CoolShell
酷 壳 – CoolShell
Y
Y Combinator Blog
Vercel News
Vercel News
The GitHub Blog
The GitHub Blog
T
The Blog of Author Tim Ferriss
云风的 BLOG
云风的 BLOG
博客园 - 司徒正美
Engineering at Meta
Engineering at Meta
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
J
Java Code Geeks
Stack Overflow Blog
Stack Overflow Blog
N
Netflix TechBlog - Medium
Martin Fowler
Martin Fowler
宝玉的分享
宝玉的分享
G
Google Developers Blog
Last Week in AI
Last Week in AI

LanYunのBlog

优化macOS Dock栏的显示与隐藏 解决macOS全屏模式下某些情况显示原始鼠标指针的问题 Yarn从Classic迁移到Modern nginx自编译 用santa对二进制进行监控和授权 ESXI 8.0安装黑群晖DSM 7.x openwrt编译过程记录 编译monero For macOS ARM 自建busuanzi不蒜子平台统计平台 浅记博客更新日志 (机翻)Kubo配置文件 修改brew services中服务的启动参数 技术杂记📝 解决Surge模块不能同步问题 为Arch Linux配置邮件服务 自编译NutClient-ESXI,更改邮件逻辑 解决ESXI和群晖使用SSH密钥登录问题 为J4125软路由ESXI中群晖提供UPS服务 在arch linux上搭建rustdesk server 解决虚拟机扩容中GPT PMBR大小不符问题 搭建Tuic V5 优雅地为macOS提供python多版本的支持 修复root路径下文件权限问题 解决macOS 14上利用Whisky运行steam时有关问题 在macOS中用PhpStorm配置Xdebug调试 利用CloudFlare Workers快速自建一个IP获取器 如何自动续期证书? 从0开始速配VPS用于网站等 搭建一个基于ChatGPT的QQ机器人(Yunzai-Bot) For Mac 010 Editor For Mac 13.0.1 Crack 破解
macOS关闭虚拟内存
LanYun · 2021-12-10 · via LanYunのBlog

前言

macOS关闭虚拟内存(交换内存 swap memory) 以减少SSD磨损,延长SSD寿命(本文含macOS硬盘写入量查询方法)

关闭后效果:

image-20231108203249083

由于macOS特性,即使你按照本文操作了,依然可能使用swap,但比之前更少.

Mac OS X / IOS 内存管理机制

OS X的内存管理与Unix是很类似的,内存管理的思想都是尽可能的使用内存,内存是计算机最宝贵的资源,读写速度快过硬盘

例如: 看上面效果图,你可能会觉得我的64G内存系统应用就用掉10G以上,这不是大大的浪费吗?

实际上,这个是很正常的,为什么呢?

在OS X中内存分为这几种状态:

  • active
  • inactive
  • free
  • wired

wired
代表联动内存,这是系统核心占用的,无法移动到硬盘,必须保留在RAM里,联动内存大小取决于当前应用程序。

active
代表当前正被使用或刚被使用过的内存

inactive
表示这些内存中的数据是非活跃的,现在没有在使用,但是最近刚被使用过。比如刚刚关闭了一个Mail应用,它的内存并不会立刻被释放掉,而是变为Inactive,这样当我们再次打开它时,就可以快速打开,而不需要从比较慢的硬盘再打开。而在没有再次打开Mail前,启动其他应用是可以用这块inactive的内存的,它就像可用内存一样,可供其他应用程序使用,但是可以在其他应用程序占用它前,使得打开Mail更快。

free
没有使用的内存

例如我的64G内存

image-20231108203341156

事实上,使用OS X/linux等类Unix操作系统时,是不需要担心内存占用太多的,因为内存就是要充分使用的。
当你有少量free内存,大量inactive内存时,表明此时系统运行在最佳状态,反而在刚开机时大量free时会比较慢。
只有当free和inactive都很少时才说明内存不够用了。但事实上,得益于SSD和M1 MAX的强大,即使CPU压缩内存到硬盘,再从硬盘取回数据,这之间的时间间隔也非常小,用户几乎很难察觉出来,所以MAC用户无需担心内存使用问题.

我尝试过将CPU和内存拉满,但即使这样,系统UI也没出现明显卡顿.

得益于OS X 系统采用了 Unified Buffer Cache,MAC的空闲内存会被用来加速文件访问.即上图中的压缩内存.

在日常使用中,可以做到随时开随用,流畅无卡顿.

了解更多,请参考🔗

为什么要关闭?

img

我们都知道,SSD写入有容量限制,一旦写入达到了设计的最大写入容量,这SSD也就报废了,

例如 512G 的 SSD 寿命一般 300T,写入量(一礼拜2T)就算刻意每天都很注意的用 2-3年你固态也写满报废了

然而还不能自己换,高度集成化,固态坏了就要全套板子一起换

256g固态的理论寿命是150TBW,一个月10T写入的话

理论来讲你只能用一年零三个月,实际情况永远是主控先挂 全盘GG

1.启动虚拟内存(默认):无论怎么样都会使用虚拟内存,除非你的内存特别大,目的是为了防止在突然打开一个超大的文件时,导致需要重新处理内存与虚拟内存。所以默认使用虚拟内存,尽量让出大部分物理内存。

2.关闭虚拟内存(需要手动):默认不使用虚拟内存,但经过我观察,似乎是超过预警阈值(内存GB-2GB的样子)就会开始使用虚拟内存,我猜测目的是为了系统的稳定性

SSD损耗科普链接🔗

如何关闭虚拟内存?

  1. 关闭系统完整性保护机制

  2. 关闭虚拟内存

首先关闭系统完整性保护需要进入recovery OS,Apple芯片进入模式与intel不同.

在电脑完全关机的情况下,一直按着电源键不放,直到提示你正在进入启动选项就可以放手了.之后点选项,选择用户,输入密码后

左上角有一排的菜单,找到终端打开它,输入:

1
2
csrutil disable 

输入yes,之后密码,然后reboot重启.

重启电脑后打开终端,输入:

sysctl -a vm.compressor_mode 来检查现在的内存模式,默认为 4

  • 1 代表不压缩内存且不启用 swap
  • 2 代表压缩内存但不启用 swap
  • 3 代表不压缩内存但启动 swap
  • 4 代表着压缩内存并启用 swap

运行命令

1
2
3
sudo nvram boot-args="vm_compressor=2 $(nvram boot-args 2>/dev/null | cut -f 2-)" 
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist >/dev/null 2>&1
sudo rm -rf /private/var/vm/swapfile*

使用指令sysctl -a vm.swapusage可以查看虚拟内存使用情况.

重启, 检查swap是否已关闭.

1
sysctl -a vm.compressor_mode

如何查询Mac硬盘写入量

查看硬盘写入量是通过一个叫 smartctl 的应用实现的

安装 HomeBrew

通过 Mac os 上的软件包管理工具 HomeBrew 来进行安装 (若已安装则跳过即可)

官网给出的方法十分简单,只需要在终端中粘贴如下代码即可:

1
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)

若出现

1
raw.githubusercontent.com port 443: Connection refused

则说明终端没有过代理(需科学上网)

简单的方法就是换源,终端输入以下代码即可:

1
2
3
4

HOMEBREW_CORE_GIT_REMOTE=https://mirrors.ustc.edu.cn/homebrew-core.git

/bin/bash -c "$(curl -fsSL https://cdn.jsdelivr.net/gh/ineo6/homebrew-install/install.sh)"

等待安装完成后,需要设置环境变量,在终端中接着输入以下代码即可:

注意:如果你确定使用的终端是zsh(一般默认是zsh),那么直接执行下面代码,否则请将两段的末尾的 zshrc 改为bashrc即可

1
2
echo export PATH=/opt/homebrew/bin:$PATH >> .zshrc
source ~/.zshrc

重启终端,并在其中输入 brew ,如果没有报错,则说明安装成功了。

关于安装 HomeBrew 的其他方法,可以参考这篇文章:

Mac必备神器Homebrew - 知乎专栏

安装 smartctl

成功安装 HomeBrew 之后,我们就可以安装 smartctl 了!在终端中输入如下代码,即可进行安装:

1
brew install smartmontools

在终端输入 smartctl ,如果没有报错则说明安装成功了。

查看硬盘使用量

在终端中输入如下代码,即可进行看查硬盘使用量。

1
smartctl -a disk0

结果如下,里面的Percentage Used 就是损耗值,Data Units Written 就是写入量。

image-20230730193200208

如何卸载

只需在终端输入下面的代码即可卸载成功:

1
brew uninstall smartmontools 

其他人硬盘读写入量参考链接