通过strace 监控 fdatasync

通过strace 监控 Redis AOF文件的系统调用

Redis中主要的AOF设置

  • 「appendonly yes」 开启每次更新操作后进行日志记录
  • 「appendfilename appendonly.aof」 AOF的文件名
  • 「 appendfsync everysec」 指定日志更新的条件,有3个值可选
    • no:表示等操作系统进行数据缓存同步到磁盘(快)
    • always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)
    • everysec:表示每秒同步一次(默认值)

通过 strace 来监控系统调用

strace -p $(pidof redis-server) -T -e trace=fdatasync

命令行解释:

  • -p 进程id
  • pidof 根据进程名得到进程id
  • -T 相对时间
  • -e 过滤系统调用

「appendfsync always」情况

strace -p $(pidof redis-server) -T -tt -e ‘fdatasync‘ 2>&1 | head -10

输出

Process 59868 attached
02:50:50.671717 fdatasync(13)           = 0 <0.000985>
02:50:50.680681 fdatasync(13)           = 0 <0.000894>
02:50:50.688486 fdatasync(13)           = 0 <0.000490>
...
02:50:50.705096 fdatasync(13)           = 0 <0.000466>
02:50:50.709080 fdatasync(13)           = 0 <0.000475>
02:50:50.713067 fdatasync(13)           = 0 <0.000470>

结论: 设置 appendfsync 为always 时,每次写操作都会调用一次fdatasync。这种情况数据最安全,但

由于每会执行fdatasync, 因此性能最差。

「appendfsync everysec」情况

当设置为appendfsync everysec 时,我在测试机上也执行同样的命令
strace -p $(pidof redis-server) -T -tt -e ‘fdatasync‘ 2>&1 。 结果strace 死活
都无法输出「fdatasync」 。后来想到这个命令只是展示redis主线程里所有的fdatasync。不包括fork
出来的子进程的「fdatasync」。 所以当设置 「appendfsync everysec」时。strace 命令务必
加 「 -f 」选项

strace -p $(pidof redis-server) -f -T -tt -e fdatasync

输出结果

[pid 54973] 07:47:10.082237 fdatasync(6) = 0 <0.002964>
[pid 54973] 07:47:11.091494 fdatasync(6) = 0 <0.002958>
[pid 54973] 07:47:12.098606 fdatasync(6) = 0 <0.003093>
[pid 54973] 07:47:13.004418 fdatasync(6) = 0 <0.005337>
[pid 54973] 07:47:14.008431 fdatasync(6) = 0 <0.003520>
[pid 54973] 07:47:15.012835 fdatasync(6) = 0 <0.005906>
[pid 54973] 07:47:16.016416 fdatasync(6) = 0 <0.003066>
[pid 54973] 07:47:17.023678 fdatasync(6) = 0 <0.003277>
[pid 54973] 07:47:18.027549 fdatasync(6) = 0 <0.003180>

当 「appendfsync 为 everysec。redis会每秒进行一次fdatasync的系统调用。将缓冲区的数据写到磁盘。这一操作在大多数数据库系统中被称之为 「group commit」,就是组合多次写操作的数据,一次性将日志写入到磁盘。

「appendfsync no」情况

Redis不会主动调用fsync去将AOF日志内容同步到磁盘,所以这一切就完全依赖于操作系统的调试了。对大多数Linux操作系统,是每30秒进行一次fsync,将缓冲区中的数据写到磁盘上。

时间: 2024-10-19 17:38:09

通过strace 监控 fdatasync的相关文章

mysql strace fsync,fdatasync

[[email protected] test]# strace -f -F -e trace=fdatasync,fsync -p 4043 Process 8703 attached with 23 threads - interrupt to quit [pid 7089] fsync(9) = 0 [pid 4063] fsync(9) = 0 [pid 4063] fsync(9) = 0 [pid 4061] fsync(4) = 0 [pid 4050] fsync(4) = 0

strace 监控所有php-fpm worker

strace命令详解  http://linux.die.net/man/1/strace strace -tt -T $(pidof 'php-fpm: pool www' | sed 's/\([0-9]*\)/\-p \1/g')

Linux应急响应姿势浅谈

一.前记 无论是甲方还是乙方的同学,应急响应可能都是家常便饭,你可能经常收到如下反馈: 运维同事 --> 服务器上存在可疑进程,系统资源占用高: 网络同事 --> 监控发现某台服务器对外大量发包: .... 不要着急,喝一杯82年的美年达压压惊,希望本文可以对你有所帮助. 二.排查流程 0x01 Web服务 一般如果网络边界做好控制,通常对外开放的仅是Web服务,那么需要先找到Webshell,可以通过如下途径: 1)检查最近创建的php.jsp文件和上传目录 例如要查找24小时内被修改的JS

项目二:主机管理-00-借鉴

主机管理+堡垒机系统开发 本节内容 需求讨论 构架设计 表结构设计 程序开发 1.需求讨论 实现对用户的权限管理,能访问哪些机器,在被访问的机器上有哪些权限 实现可以通过web页面对指定主机列表 进行 批量发布命令.文件 实现对用户操作进行纪录 2.架构设计 3. 表结构设计 参考 http://www.cnblogs.com/alex3714/articles/5286889.html 前景介绍 到目前为止,很多公司对堡垒机依然不太感冒,其实是没有充分认识到堡垒机在IT管理中的重要作用的,很多

一个Python开源项目-哈勃沙箱源码剖析(下)

前言 在上一篇中,我们讲解了哈勃沙箱的技术点,详细分析了静态检测和动态检测的流程.本篇接着对动态检测的关键技术点进行分析,包括strace,sysdig,volatility.volatility的介绍不会太深入,内存取证这部分的研究还需要继续. strace机制 上一篇讲到了strace和ltrace都是基于ptrace机制,但是对ptrace机制和strace/ltrace是如何利用ptrace监控系统调用,没有进行详细的讲解.   那什么是ptrace机制呢? ptrace机制是操作系统提

Linux监控命令全解之_netstat,uptime,ps,watch,strace,lsof

1.1 top 1.1.1 命令说明 Top 命令能够实时监控系统的运行状态,并且可以按照cpu.内存和执行时间进行排序 1.1.2 参数说明 命令行启动参数: 用法: top -hv | -bcisSHM -d delay -n iterations [-u user | -U user] -p pid [,pid ...] -b : 批次模式运行.通常用作来将top的输出的结果传送给其他程式或储存成文件 -c : 显示执行任务的命令行 -d : 设定延迟时间 -h : 帮助 -H : 显示线

小米开源监控系统Open-Falcon安装使用笔记

前言 近期爆出Zabbix有严重bug,加上一直对zabbix的性能.UI不满.所以这次想钻研一下最近很火的open-falcon,源于小米公司的开源项目,赞一个. 一.官网介绍 监控系统是整个运维环节,乃至整个产品生命周期中最重要的一环,事前及时预警发现故障,事后提供翔实的数据用于追查定位问题.监控系统作为一个成熟的运维产品,业界有很多开源的实现可供选择.当公司刚刚起步,业务规模较小,运维团队也刚刚建立的初期,选择一款开源的监控系统,是一个省时省力,效率最高的方案.之后,随着业务规模的持续快速

Linux服务器常用性能监控命令汇总

1.ifconfig 网卡数目.ip地址.Mac地址.MTU大小 eth0 Link encap:Ethernet HWaddr 00:0d:3a:50:12:e9 inet addr:10.0.0.4 Bcast:10.0.0.255 Mask:255.255.255.0 inet6 addr: fe80::20d:3aff:fe50:12e9/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1

linux监控命令全覆盖(图文说明)

1.1 top 1.1.1 命令说明 Top 命令能够实时监控系统的运行状态,并且可以按照cpu.内存和执行时间进行排序 1.1.2 参数说明 命令行启动参数: 用法: top -hv | -bcisSHM -d delay -n iterations [-u user | -U user] -p pid [,pid ...] -b : 批次模式运行.通常用作来将top的输出的结果传送给其他程式或储存成文件 -c : 显示执行任务的命令行 -d : 设定延迟时间 -h : 帮助 -H : 显示线