Mac OS定时清理系统内存(缓存)

使用Mac的小伙伴都知道,打开的程序多了用着用着,mac的内存就会飙升,如果你装有类似“腾讯电脑管家”,这货里面有个内存管理功能,类似于360的内存清理的浮动球,会发现他经常99%…

虽然说,mac系统不会特别卡,很少会出现点击了没反应,但是你看着一个logo在Dock跳呀跳跳呀跳(那就是反应迟钝了),也是超级不爽的嘛…

据说,这是mac系统会缓存一部分的数据,增加下次访问速度; 不过,鬼知道他缓存的是啥,鬼知道他什么时候释放,他怎么知道我下一次需要啥文件,问都不问就缓存下来了,所以还是定期清理一下吧!

164826_wXOq_1258368

其实我也不是开很多程序,以我为例哈,作为一个开发首先,编辑器要打开吧,WebStorm,sublime text 3;打开个浏览器找下资料,chrome;一个终端,一个微信,一个xcode,好,就这些,没有了,可这么几个应用,mac就经常会飙到99%的内存占用

170836_9rxm_1258368

在google搜索一顿,发现mac中有个命令叫 purge,使用这个命令可以清空系统内存;这就是我需要的,给他上个sudo,执行 sudo purge,内存占用马上下来了。

那么问题又来了,这内存占用肯定是“野火烧不尽,春风吹又生”的,但是我总不能隔一会就手动在终端里面去执行一次sudo purge呀!这不是更崩溃吗,还不如不清理呢…

所以,聪明的人们发现了重复的劳动力的惯性任务都可以使用定时任务去完成,例如备份日志,备份数据库,监控这类;所以,我也打算使用定时任务来清除内存;

Mac上定时任务可以使用launchctl或者crontab,我个人选择了launchctl;

使用launchctl只需要以下几步,我会直接贴代码并且带上简单描述:

一. 编写plist文件 com.clean.ram.plist (名字自己随意)文件 ,把这个文件丢到/Library/LaunchAgents下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<!-- 名称,要全局唯一 -->
<key>Label</key>
<string>com.clean.ram</string>
<!-- 要运行的程序 路径 -->
<key>Program</key>
<string>/Users/GavinMBP/xxx/clear_ram/clear.sh</string>
<!-- 运行间隔,与StartCalenderInterval使用其一,单位为秒s -->
<key>StartInterval</key>
<integer>300</integer>
<!-- 标准输入文件 -->
<key>StandardInPath</key>
<string>/Users/GavinMBP/xxx/clear_ram/run-in.log</string>
<!-- 标准输出文件 -->
<key>StandardOutPath</key>
<string>/Users/GavinMBP/xxx/clear_ram/run-out.log</string>
<!-- 标准错误输出文件 -->
<key>StandardErrorPath</key>
<string>/Users/GavinMBP/xxx/clear_ram/run-err.log</string>
</dict>
</plist>

ps:有几个其他参数我没用到,所以省略了,有需要的话,可以找一下下面参考的文章

二、编写bash代码 clear.sh:这个比较简单,我就是执行sudo purge,然后打印日志到某个文件

1
2
3
4
#!/bin/bash
sudo purge
#文件路径,不需要日志可以吧日志注释掉
echo "clear success at :"+`date "+%Y/%m/%d %X"` >> /Users/xxxx/xxx/clear.log

这里面有两个点需要注意:
1、sudo purge这个会让你输入管理员密码,所以你必须让这个指令不用输入密码;所以,请自行完成google/百度 :mac sudo 命令 不需要密码
2、必须让clear.sh是可执行的,给足够的权限 chmod 777 clear.sh

三、把第一步创建的plist文件丢到/Library/LaunchAgents下,根据自己的需要,执行以下命令,一般是1,5就OK了,1执行,5查看有木有,satrt可以看到效果

1
2
3
4
5
launchctl load   /Library/LaunchAgents/com.clean.ram.plist #加载plist文件
launchctl unload /Library/LaunchAgents/com.clean.ram.plist #卸载
launchctl start /Library/LaunchAgents/com.clean.ram.plist #立即运行,先load,在执行start
launchctl stop /Library/LaunchAgents/com.clean.ram.plist #立即停止
launchctl list | grep com.clean.ram #查看列表

ps:每次修改了.plish文件,记得要重新load,不然不生效!

好!就是酱紫!时间你自己设置就好!我比较喜欢300s执行一次,妥妥的!

参考:

文中代码:https://github.com/niezw/crontab_to_clear_mac_arm

具体关于launchctl的其他操作,可以看看:https://my.oschina.net/shede333/blog/470377

sudo不需要密码:http://www.examw.com/os/windows/133193/