Linux.中国 - 开源社区

 找回密码
 骑士注册

QQ登录

微博登录


性能优化:使用ramlog将日志文件转移到内存中

2015-3-26 07:21    评论: 20 收藏: 3 分享: 21    

Ramlog 以系统守护进程的形式运行。在系统启动时它创建虚拟磁盘(ramdisk),将 /var/log 下的文件复制到虚拟磁盘中,同时把虚拟磁盘挂载为/var/log。然后所有的日志就会更新到虚拟磁盘上。而当 ramlog 重启或停止时,需要记录到硬盘上的日志就会保留在目录/var/log.hdd中。而关机的时候,(ramdisk上的)日志文件会重新保存到硬盘上,以确保日志一致性。Ramlog 2.x默认使用tmpfs文件系统,同时也可以支持ramfs和内核ramdisk。使用rsync(译注:Linux数据镜像备份工具)这个工具来同步日志。

注意:如果突然断电或者内核崩溃(kernel panic)时,没有保存进硬盘的日志将会丢失。

如果你拥有够多的可用内存,而又想把日志放进虚拟磁盘,就安装ramlog吧。它是笔记本用户、带有UPS的系统或是直接在flash中运行的系统的优良选择,可以节省日志的写入时间。

Ramlog的运行机制以及步骤如下:

  1. Ramlog 由第一个守护进程(这取决于你所安装过的其它守护进程)启动。

  2. 然后创建目录/var/log.hdd并将其硬链至/var/log。

  3. 如果使用的是tmpfs(默认)或者ramfs 文件系统,将其挂载到/var/log上。

  4. 而如果使用的是内核ramdisk,ramdisk会在/dev/ram9中创建,并将其挂载至/var/log。默认情况下ramlog会占用所有ramdisk的内存,其大小由内核参数"ramdisk_size"指定。

  5. 接着其它的守护进程被启动,并在ramdisk中更新日志。Logrotate(译注:Linux日志轮替工具)和 ramdisk 配合的也很好。

  6. 重启(默认一天一次)ramlog时,目录/var/log.hdd将借助rsync与/var/log保持同步。日志自动保存的频率可以通过cron(译注:Linux例行性工作调度)来控制。默认情况下,ramlog 的调度任务放置在目录/etc/cron.daily下。

  7. 系统关机时,ramlog在最后一个守护进程关闭之前关闭。

  8. 在ramlog关闭期间,/var/log.hdd中的文件将被同步至/var/log,接着/var/log和/var/log.hdd都被卸载,然后删除空目录/var/log.hdd。

注意:- 此文仅面向高级用户

在Ubuntu中安装Ramlog

首先需要用以下命令,从这里下载.deb安装包:

wget http://www.tremende.com/ramlog/download/ramlog_2.0.0_all.deb

下载ramlog_2.0.0_all.deb安装包完毕,使用以下命令进行安装:

sudo dpkg -i ramlog_2.0.0_all.deb

这一步会完成整个安装,现在你需要运行以下命令:

sudo update-rc.d ramlog start 2 2 3 4 5 . stop 99 0 1 6 .

现在,在更新sysklogd的初始化顺序,使之能在ramlog停止运行前正确关闭:

sudo update-rc.d -f sysklogd remove

sudo update-rc.d sysklogd start 10 2 3 4 5 . stop 90 0 1 6 .

然后重启系统:

sudo reboot

系统重启完毕,运行'ramlog getlogsize'来获取你当前的/var/log的空间大小。在此基础之上多分配40%的空间,确保ramdisk有足够的空间(这整个都将作为ramdisk的空间大小)。

编辑引导配置文件,如/etc/grub.conf,、/boot/grub/menu.lst 或/etc/lilo.conf(译注:具体哪个配置文件视不同引导加载程序而定),给你的当前内核的新增选项 'ramdisk_size=xxx' ,其中xxx是ramdisk的空间大小。

配置Ramlog

基于deb的系统中,Ramlog的配置文件位于/etc/default/ramlog,你可以在该配置文件中设置以下变量:

RAMDISKTYPE=0
# 取值:
# 0 -- tmpfs (可被交换到交换分区) -- 默认
# 1 -- ramfs (旧内核不能设置最大空间大小, 
# 不能被交换到交换分区,和 SELinux 不兼容)
# 2 -- 老式的内核 ramdisk
TMPFS_RAMFS_SIZE=
# 可以用于 tmpfs 或 ramfs 的最大内存大小
# 这个值可以是百分比或数值(单位是 Mb),例如:
# TMPFS_RAMFS_SIZE=40%
# TMPFS_RAMFS_SIZE=100m
# 该值为空表示 tmpfs/ramfs 的大小是全部内存的 50%
# 更多选项可以参考 ‘man mount' 中的‘Mount options for tmpfs' 一节
# (补充,在较新的内核中,ramfs  支持大小限制,
# 虽然 man 中说没有这个挂载选项)
# 该选项仅用于 RAMDISKTYPE=0 或 1 时
KERNEL_RAMDISK_SIZE=MAX
#以 kb 为单位指定的内核 ramdisk 大小,或者使用 MAX 来使用整个 ramdisk。
#该选项仅用于 RAMDISKTYPE=2 时
LOGGING=1
# 0=关闭, 1=打开 。记录自身的日志到 /var/log/ramdisk
LOGNAME=ramlog
# 自身的日志文件名 (用于 LOGGING=1时)
VERBOSE=1
# 0=关闭, 1=打开 (设置为 1时,启动或停止失败时会调用 teststartstop 将细节
# 写到日志中) 

在Ubuntu中卸载ramlog

打开终端运行以下命令:

sudo dpkg -P ramlog

注意:如果ramlog卸载之前仍在运行,需要重启系统完成整个卸载工作。


via: http://www.ubuntugeek.com/improve-system-performance-by-moving-your-log-files-to-ram-using-ramlog.html

作者:ruchi 译者:soooogreen 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

发表评论


最新评论

我也要发表评论

来自广东深圳的 Chrome 51.0|Windows 7 用户 2016-10-29 13:38
1
油沥茄子 发表于 2015-3-26 08:03 的评论:
突然断电就悲剧了。还是觉得风险太大的一个解决方案,另外有点奇怪,这个解决了啥问题?
解决了日志量太大,写入很耗费时间的问题,而用rsyslog  读取日志的时候,还要等待写入之后才能读取
2 回复
来自广东深圳的 Chrome 51.0|Windows 7 用户 2016-10-29 13:38
1
油沥茄子 发表于 2015-3-26 08:03 的评论:
突然断电就悲剧了。还是觉得风险太大的一个解决方案,另外有点奇怪,这个解决了啥问题?
解决了日志量太大,写入很耗费时间的问题,而用rsyslog  读取日志的时候,还要等待写入之后才能读取
回复
BruceAuyeung 2015-3-29 21:20
记录日志会成为性能瓶颈吗?冒着日志丢失的风险(生产环境中的日志都是及其宝贵的),就为了解决一个不是问题的问题?
回复
随便就行了 2015-3-26 16:33  新浪微博网友评论
@我的印象笔记
回复
linux 2015-3-26 16:11
1
来自 - 福建福州 的 Chrome/Windows 用户 发表于 2015-3-26 10:25 的评论:
刚做了U盘上的linux,倒是有点想装个这玩意。不过LINUX的日志是做什么的,小白求解。。。。
就是记录各种事情。 blabla ~
回复
linux 2015-3-26 16:11
1
lyhabc 发表于 2015-3-26 10:39 的评论:
我觉得不是太安全
只用于特定环境,其实不建议用于繁忙的服务器环境
回复
纤夫张 2015-3-26 11:03  新浪微博网友评论
真有用么?如果日志量不大,已经有内核缓冲了,如果太大,ram也放不下,都会通过网络发出去了。
回复
lyhabc 2015-3-26 10:39
我觉得不是太安全
6 回复
来自 - 福建福州 的 Chrome/Windows 用户 2015-3-26 10:25
刚做了U盘上的linux,倒是有点想装个这玩意。不过LINUX的日志是做什么的,小白求解。。。。
回复
FoamValue 2015-3-26 09:41
内存不是很多   mark
回复
Linux中国 2015-3-26 09:33  新浪微博网友评论
回复@eve_ouyang:请看全文~
回复
eve_ouyang 2015-3-26 09:03  新浪微博网友评论
[衰] 万一 出现极端情况,kernel crash了,掉电了那。。。。
回复
爱欲荣华不可常保皆当别离无可乐 2015-3-26 09:03  新浪微博网友评论
//@Linux中国:回复@油沥茄子:如果你拥有够多的可用内存,而又想把日志放进虚拟磁盘,就安装ramlog吧。它是笔记本用户、带有UPS的系统或是直接在flash中运行的系统的优良选择,可以节省日志的写入时间 //@油沥茄子:突然断电就悲剧了。还是觉得风险太大的一个解决方案,另外有点奇怪,这个解决了啥问题
回复
Linux中国 2015-3-26 09:03  新浪微博网友评论
回复@油沥茄子:如果你拥有够多的可用内存,而又想把日志放进虚拟磁盘,就安装ramlog吧。它是笔记本用户、带有UPS的系统或是直接在flash中运行的系统的优良选择,可以节省日志的写入时间。
回复
Linux中国 2015-3-26 09:03  新浪微博网友评论
回复@油沥茄子:如果你拥有够多的可用内存,而又想把日志放进虚拟磁盘,就安装ramlog吧。它是笔记本用户、带有UPS的系统或是直接在flash中运行的系统的优良选择,可以节省日志的写入时间。 //@油沥茄子:突然断电就悲剧了。还是觉得风险太大的一个解决方案,另外有点奇怪,这个解决了啥问题?
回复
达尔文的师弟 2015-3-26 08:33  新浪微博网友评论
Repost
回复
油沥茄子 2015-3-26 08:03  新浪微博网友评论
突然断电就悲剧了。还是觉得风险太大的一个解决方案,另外有点奇怪,这个解决了啥问题?
回复
shenwei5566 2015-3-26 08:03  新浪微博网友评论
@我的印象笔记
回复
LinuxStory 2015-3-26 07:33  新浪微博网友评论
早安[太阳][微风]
回复
大亮仔仔 2015-3-26 07:33  新浪微博网友评论
@有道云笔记收藏
回复

热点评论

lyhabc 2015-3-26 10:39
我觉得不是太安全
6
来自广东深圳的 Chrome 51.0|Windows 7 用户 2016-10-29 13:38
解决了日志量太大,写入很耗费时间的问题,而用rsyslog  读取日志的时候,还要等待写入之后才能读取
2
返回顶部

分享到微信朋友圈

打开微信,点击底部的“发现”,
使用“扫一扫”将网页分享至朋友圈。