博客迁移完腾讯云以后, 又配置好了 ssl, 一直在调优 PHP 的性能, 中午调整了半天 fpm 和 opcache, 晚上又突然想起来我之前在某个大会上分享过的使用 tmpfs(把内存当成硬盘) 来加速网站的做法, 于是~搞!
重要的事情要说三遍, 开始之前, 对你对 nginx root 目录要备份, 备份, 备份!
腾讯云这台机器是 Ubuntu 的, 版本是:
- $ cat /etc/issue
- Ubuntu 18.04.4 LTS \n \l
首先, 我们创建一个目录, 比如 / ramdisk, 然后使用 tmpfs 命令挂载一部分内存当作硬盘:
mount -t tmpfs -o size=256M tmpfs /ramdisk
此处我挂载了最大 256M 的内存到 / tmp 节点, 值得注意的是系统不会一下子就会把 256M 内存占用, 而是实际用多少占多少, 最大不超过 256M.
可以用 df 来确认是否成功操作:
- $ df -h
- Filesystem Size Used Avail Use% Mounted on
- ......
- tmpfs 256M 0 256M 0% /ramdisk
接下来我们需要用到一个今天才发现的神器 (以前还要自己写 corntab 脚本来做同步:<), Anything-sync-daemon , 它可以自动的把一个指定目录同步到 tmpfs, 并且能设置按时, 或者系统启动时来自动同步, 有了个这个工具, 这一切都会变得非常简单.
首先下载 asd( Anything-sync-daemon ):
wget https://github.com/graysky2/anything-sync-daemon/archive/master.zip
解压缩之后, 执行安装:
- make install-systemd-all
- (这里有个问题, 默认的它会把 systemd 服务安装到 / usr/lib/systemd/system, 但不知道为啥在我的这个系统不 systemd 找不到这个服务, 我通过把它的几个服务脚本拷贝到 / lib/systemd/system 解决)
- mv asd-resync.service asd-resync.timer asd.service /lib/systemd/system
然后通知 systemd:
systemctl daemon-reload
我的博客的 nginx 的 root 是 / home/huixinchen/www/htdocs 下, 我们现在希望是这个目录能自动同步到 tmpfs 目录, 也就是 / ramdisk, 于是我们修改 asd.conf 文件, 增加:
- WHATTOSYNC=('/home/huixinchen/www/htdocs/') // 要同步的目录
- VOLATILE="/ramdisk" // tmpfs 目录
你也可以同步多个文件, 只需要逗号分隔写在 WHATTOSYNC 数组里即可, 比如:
WHATTOSYNC=('/home/huixinchen/www/htdocs/', '/home/huixinchen/local/xxxx') // 要同步的目录
然后我们设置每天同步一次 tmpfs 上的变更内容到硬盘, 编辑 / lib/systemd/system/asd-resync.timer,
- [Unit]
- Description=Timer for Anything-sync-daemon - 1Hour
- PartOf=asd-resync.service asd.service
- [Timer]
- OnUnitActiveSec=24h
然后我们用 asd p 检查下:
- $ asd p
- Anything-sync-daemon v5.85 on Ubuntu 18.04.4 LTS
- Daemon pid file is not present.
- Resync cronjob is not present.
- Overlayfs technology is currently inactive.
- Asd will manage the following per /etc/asd.conf settings:
- owner/group id: huixinchen/1000
- target to manage: /home/huixinchen/www/htdocs
- sync target: /home/huixinchen/www/.htdocs-backup_asd
- tmpfs target: /ramdisk/asd-huixinchen/home/huixinchen/www/htdocs
- dir size: 237M
- recovery dirs: none
asd 会把我的
/home/huixinchen/www/htdocs
目录同步到
/ramdisk/asd-huixinchen/home/huixinchen/www/htdocs,
并且会把 tmpfs 上的更新内容按照时间写回到
/home/huixinchen/www/.htdocs-backup_asd
当我们停止 asd 的服务的时候, asd 会把. htdocs-backup_asd 在 mv 成 htdocs, 这样就不用担心你的内容会因为服务器突然断电丢失了.
现在, 让我们启动 asd:
service asd start
现在 / home/huixinchen/www/htdocs 就会被复制到 tmpfs, 并且软链接过去, 也就是说 nginx 我们根本不需要修改, 只需要重启一下 fpm, 重置一下 opcache 的 cache 即可:
- $ ll
- total 0K
- lrwxrwxrwx 1 huixinchen huixinchen 50 Feb 15 22:27 htdocs -> /ramdisk/asd-huixinchen/home/huixinchen/www/htdocs/
重启完 fpm, 一切 works out of the box!
PS: 关于 Asd 更多的信息, 可以参考: Anything-sync-daemon
来源: http://www.tuicool.com/articles/6z6VnqA