针对Ubuntu24.04Server的日志优化-少写硬盘

博客 37次浏览 收藏

最近因为各种原因买了两块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 下,可以在非生产环境下先试试。


评论

登录后可以发表评论与回复。

还没有评论,来做第一个发言的人。