性能优化:使用ramlog将日志文件转移到内存中
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的运行机制以及步骤如下:
而如果使用的是内核ramdisk,ramdisk会在/dev/ram9中创建,并将其挂载至/var/log。默认情况下ramlog会占用所有ramdisk的内存,其大小由内核参数"ramdisk_size"指定。
接着其它的守护进程被启动,并在ramdisk中更新日志。Logrotate(译注:Linux日志轮替工具)和 ramdisk 配合的也很好。
重启(默认一天一次)ramlog时,目录/var/log.hdd将借助rsync与/var/log保持同步。日志自动保存的频率可以通过cron(译注:Linux例行性工作调度)来控制。默认情况下,ramlog 的调度任务放置在目录/etc/cron.daily下。
在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卸载之前仍在运行,需要重启系统完成整个卸载工作。
原文发布时间:2015-03-26
本文来自云栖合作伙伴“linux中国”
内核干货 | 数据库存储引擎如何利用好CPU缓存? 本文探讨如何优化X-Engine中DataBlock内部的记录编码格式,以降低在DataBlock中查找单条记录时的CPU cache miss次数,最终目标是提升DataBlock点查询性能。
如何解决临时空间暴增导致磁盘满问题? 报错信息: Cannot create temp file ...: No space on device 实例因磁盘空间暴增,导致磁盘满而锁定 解决方案: 这种情况可能是由于嵌套SQL、多表关联SQL编写不当,导致的大量内存溢出磁盘。
相关文章
- Java内存模型FAQ(九)在新的Java内存模型中,final字段是如何工作的
- 全面理解Unity加载和内存管理
- 透过内存图看堆栈
- php 多进程解决代码常驻内存的问题php 多进程解决代码常驻内存的问题
- 面试- 阿里-. 大数据题目- 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?
- Atitit.病毒木马的快速扩散机制原理nio 内存映射MappedByteBuffer
- Python:缓存库mo-cache支持内存、文件、Redis
- 【Linux 内核 内存管理】虚拟地址空间布局架构 ③ ( 内存描述符 mm_struct 结构体成员分析 | mmap | mm_rb | task_size | pgd | mm_users )
- 【Android 逆向】Android 系统文件分析 ( cpuinfo 处理器信息文件 | self 当前进程信息文件 | meminfo 当前内存信息文件 )
- 【Android 逆向】Android 逆向基本概念 ( 软件运行时内存结构 | 文件与内存之间的联系 )
- 【Android 内存优化】图片文件压缩 ( Android 原生 API 提供的图片压缩功能能 | 图片质量压缩 | 图片尺寸压缩 )
- 一个 -100.01 的double 在内存中怎么存储的. 一个中文String 在内存中占多少直接 utf-8 / GBK
- PostgreSQL的学习心得和知识总结(二十四)|CentOS环境 配置生成coredump程序崩溃内存转储文件及gdb调试core文件
- 嵌入式linux开发,将文件存放目录挂载到系统内存中
- columbo——EDR上进程注入可以使用,依赖Volatility3 内存提取,无文件攻击典型场景
- 内存无文件攻击检测——Hunting In Memory,todo,待实践
- VoltDB介绍——本质:数据保存在内存,充分利用CPU,单线程去锁,底层数据结构未知
- Linux 进程和线程 内存访问以及调度
- 第五篇:初识JVM,JVM自动内存管理
- PostgreSQL的学习心得和知识总结(二十四)|CentOS环境 配置生成coredump程序崩溃内存转储文件及gdb调试core文件