针对Ubuntu24.04Server的日志优化-少写硬盘
最近因为各种原因买了两块Nvme M2固态硬盘,容量只有256G价格一个顶我去年卖1Tb的价格了,感觉自己就是冤大头。但是TLC颗粒,也把系统优化下,希望用的长久。
1.控制 Swap(虚拟内存)的使用
Linux 默认的 Swap 机制比较激进(Swappiness=60),如果物理内存快满了,它会频繁向系统盘(SSD)写入虚拟内存数据。
你可以在终端输入
cat /proc/sys/vm/swappiness
查看。如果是 60,建议修改为 10(让系统优先使用物理内存)。
修改命令:
sudo sysctl vm.swappiness=10
(若要永久生效,需将其写入 /etc/sysctl.conf 文件底部)
sudo vim /etc/sysctl.conf
添加内容
vm.swappiness=10
保存。
2.限制 systemd-journald 的最大体积与写入
Ubuntu 默认的日志服务会频繁向硬盘写入数据。
我们可以通过修改配置文件,让它只把日志保存在内存中,断电或重启自动消失,从而实现系统盘“零写入”。
打开 journald 配置文件:
sudo vim /etc/systemd/journald.conf
找到并修改以下几项(如果没有则手动在 [Journal] 下方添加):
# Storage=volatile 表示日志只保存在内存中(RAM),绝不写入硬盘
Storage=volatile
# 限制内存中日志的最大占用,防止塞满内存(比如限制为 50M)
SystemMaxUse=100M
请谨慎使用此类代码。
如有有docker
RuntimeMaxUse=50M RuntimeMaxFileSize=20M
保存并退出(Nano 编辑器中按 Ctrl+O 确认,再按 Ctrl+X 退出)。
重启日志服务使配置生效:
sudo systemctl restart systemd-journald
3.我们可以通过修改 Docker 的全局配置,限制每个容器的日志大小。
编辑或创建 Docker 全局配置文件
sudo vim /etc/docker/daemon.json
请谨慎使用此类代码。
写入或将内容修改为以下配置,让它也写到内存中
json{
"log-driver": "journald"
}重启docker服务
sudo systemctl restart docker
4. apache2 日志目录放进RAM
sudo vim /etc/fstab
增加一行:
tmpfs /var/log/apache2 tmpfs defaults,noatime,size=100M,mode=0755 0 0
这里的 100M 可以改成你想要的大小,比如 50M、200M。
立即让它生效
sudo systemctl daemon-reload sudo mount /var/log/apache2
检查
df -h
5.MariaDB 临时目录 也放在RAM
tips: 数据临时和缓存放进 ram 后,如果网站配置的时候数据库相关的配置更改了,一定要重启 数据库服务,要不然链接数据库报错
sudo systemctl restart mariadb # 重启mariadb 服务的命令先建立 tmpfs:
sudo mkdir -p /var/lib/mysql-tmp
编辑:
sudo vim /etc/fstab
加入:
tmpfs /var/lib/mysql-tmp tmpfs defaults,noatime,size=512M,mode=1777 0 0
挂载:
sudo systemctl daemon-reload sudo mount /var/lib/mysql-tmp
然后编辑 MariaDB:
sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf
在 [mysqld] 下加入:
tmpdir=/var/lib/mysql-tmp
重启:
sudo systemctl restart mariadb
6. MariaDB 缓存放RAM
sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf
例如你的机器内存如果有 16 GB,可以考虑:
[mysqld]
innodb_buffer_pool_size=4G
我的只有8G内存 数据库也不大 1G 也足够多了
innodb_buffer_pool_size=1G
7.关闭 rsyslog 传统文本日志(直接关闭法)
Ubuntu 默认还会通过 rsyslog 服务在 /var/log/ 目录下生成 syslog、auth.log 等传统的纯文本文件。
如果你已经做了方法一,这个服务可以直接关闭。
直接彻底关闭并禁用 rsyslog:
sudo systemctl stop rsyslog sudo systemctl disable rsyslog
这个需要系统重启 才能生效。
注:执行此命令后,/var/log/syslog 等文件将彻底停止更新。
Linux 平常内存真的占用不高,所以大胆的把内存用起来,让日志缓存等等信息尽量写入内存,重启后直接消失,没重启前也是能够正常查看的。
大胆点的 可以把 整个/var/log 挂载到tmps 下,可以在非生产环境下先试试。
登录后可以发表评论与回复。
还没有评论,来做第一个发言的人。