我们採用Linux的syslog来记录产品的debug log。

调用当中的一个可运行文件。运行完命令之后,查看debug log的信息,竟然从某一条log之后的log都丢失了。多次尝试后,发现每次都在某条固定的log之后的log都丢失了。

这篇博文就让我们一起来探个到底。

一. 问题发现

在发现真正问题之前我做了下面尝试:

(1) 进程是否在固定log之后某种逻辑退出?或者在固定log打印之后的语句中会产生信号导致进程终止? 在程序末尾打印一个消息到屏幕,能够看到程序正常执行,并退出。

(2) 是否debug log对象发生了改变。或者debug level在执行中发生了改变? 相同在程序中打印这些信息,发现并无异常。

(3) gdb调试查看程序走的分支逻辑

如上方法均未发现问题,事实上另一种想法:syslog会不会丢弃一些log信息?但一開始是被我排除的,当时原因有二:第一在Redhat4/5上均不会出现这个问题;第二Redhat 6平台上的产品已经公布了至少一年了,要是debug log总是缺少应该不会等到我来发现吧。然而。正是因为一些惯有的思维。或者是一些看似有理却不严谨的判断。导致真相姗姗来迟。

接着。我优先查看了/var/log/messages文件, 看到了例如以下的错误信息。而6292正是我之前运行的进程ID。

imuxsock begins to drop messages from pid 6292 due to rate-limiting

那么非常显然。于是非常快利用google神器,找到了原因。这个是和Redhat 6中的rsyslog的机制有关系。而且这些机制可配置。

二. Redhat 6.3中rsyslog的Rate Limit配置

所谓Rate limit就是指,在某个固定的时间段内,syslog最多同意打印的log信息数量(多出的log信息将被丢弃)。在Redhat 6中。由配置文件/etc/rsyslog.conf中下面两个配置项决定:

$SystemLogRateLimitInterval [Number1]: Number1 为设定的限制的时间间隔大小

$SystemLogRateLimitBurst [Number2]: Number2 为在设定的限制的时间间隔内,最多输出的log信息数量。

在设定完后,则表示在每个Number1时间间隔内,假设超过Number2个数的log信息将会被去除。

默认Number1为5秒钟,Number2为200.但假设我们不希望。在打印的log时有丢失,则能够在/etc/rsyslog.conf中加入或者设置

$SystemLogRateLimitInterval 0

当然设置完毕后,一定要记得又一次启动rsyslog服务(用命令:service rsyslog restart)哦~~~

Note:rsyslog 5.7.1之后的版本号才加入了此功能,而Redhat 6.3採用的是rsyslog 5.8.10 。

參考:

1. https://bugzilla.redhat.com/show_bug.cgi?format=multiple&id=753363

2. http://lists.adiscon.net/pipermail/rsyslog/2011-April/028307.html

3. http://www.rsyslog.com/tag/rate-limiting/

4. http://www.rsyslog.com/changelog-for-5-7-1-v5-devel/

Redhat 6.3中syslog信息丢失的更多相关文章

  1. 解决SpringCloud使用Feign跨服调用时header请求头中的信息丢失

    在使用SpringCloud进行Feign跨服调用时header请求头中的信息会丢失,是因为Feign是不会带上当前请求的Cookie信息和头信息的,这个时候就需要重写请求拦截. 1.需要重写Requ ...

  2. SpringCloud升级之路2020.0.x版-43.为何 SpringCloudGateway 中会有链路信息丢失

    本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent 在开始编写我们自己的日志 Filter 之前,还有一个问题我想在这里和大家分享,即在 Sp ...

  3. 【Discuz】云平台服务:出了点小错,由于站点ID/通信KEY等关键信息丢失导致Discuz!云平台服务出现异常

    提示信息 出了点小错,由于站点ID/通信KEY等关键信息丢失导致Discuz!云平台服务出现异常 版本X3.2.20160601 解决方案 Step1.修改云平台开通状态为未开通状态 Step2.访问 ...

  4. EXT3文件系统误删除导致文件系统中的邮件丢失恢复方法

    一.故障描述 由8块盘组成的RAID5, 上层是EXT3文件系统,由于误删除导致文件系统中的邮件丢失 二.镜像磁盘为防止数据恢复过程中由于误操作对原始磁盘造成二次破坏, 使用winhex软件为每块磁盘 ...

  5. python学习笔记——爬虫中提取网页中的信息

    1 数据类型 网页中的数据类型可分为结构化数据.半结构化数据.非结构化数据三种 1.1 结构化数据 常见的是MySQL,表现为二维形式的数据 1.2 半结构化数据 是结构化数据的一种形式,并不符合关系 ...

  6. Raid信息丢失数据恢复及oracle数据库恢复验证方案

    早些时候,有个客户14块盘的磁盘阵列出现故障,需要恢复的数据是oracle数据库,客户在寻求数据恢复技术支持,要求我提供详细的数据恢复方案,以下是提供给客户的详细数据恢复解决方案,本方案包含Raid数 ...

  7. yum(Fedora和RedHat以及SUSE中的Shell前端软件包管理器)命令详解

    yum官方网站:http://yum.baseurl.org/ Fedora对于yum的介绍:http://fedoraproject.org/wiki/Yum yum(全称为 Yellow dog ...

  8. Fedora 和 RedHat 以及 SUSE 中 YUM 工具的使用

    参考博客:https://www.cnblogs.com/good-study/p/9928587.html 一.yum命令概述: 1.简介: yum命令时在Fedora和RedHat以及SUSE中基 ...

  9. HBase2.0 meta信息丢失的修复方法

    在HBase入库日志中发现有一个表入库失败,检查HBase服务端后发现该表的meta信息丢失了: 而HDFS上的region还在: 而HBCK工具不支持HBase2.0版本,只好自己写一个修复工具.网 ...

随机推荐

  1. 将n进制的数组压缩成字符串(0-9 a-z)同一时候解压

    比如一个3进制的数组: [1 1 2 2 2 0 0] 用一个字符串表示... 此类题目要明白两点: 1. 打表:用数组下标索引字符.同一时候注意假设从字符相应回数字: int index = (st ...

  2. 利用iframe技巧获取訪问者qq

    今天工作时,有个暂时加的好友问我,怎么利用web页面获取訪问者的qq. 曾经没有接触过,感觉到非常好奇,可是工作中脑子非常亢奋,转的快,利用所学的知识迅速想到一条技巧,那就是假想用户在进入我们设定的页 ...

  3. AllocateHWnd的作用,以及它在控件里的使用

    有TTimer,TDragObject,TClipboard用到了这个函数,具体分析,待续...

  4. 窗体透明,但窗体上的控件不透明(简单好用)good

    1.在Delphi中,设置窗体的AlphaBlend := true;AlphaBlendValue := 0-255; AlphaBlendValue越小窗体的透明度就越高.这种方法将会使窗体和窗体 ...

  5. queue C++

    #include <iostream> using namespace std; class DequeEmptyException { public: DequeEmptyExcepti ...

  6. Direct UI

    在界面开发中,眼下DirectUI是个热门的技术名称,由于众多的知名公司都是用DirectUI方式作出了非常炫丽的界面.而对于大多数熟悉Win32控件,熟悉MFC开发的开发者来说,我们应该做何选择? ...

  7. java特权制度设计篇

    数据库表设计 1.1.1.   模块管理(jk_module) 项 类型 说明 id long 就是数据库记录idx号 name string 模块名称 orderid int 排序id  由小到大显 ...

  8. RGB转为Lab空间

    虽然若干年前就看过了关于色彩空间的介绍,但是直到今天才自己动手写代码做这件事情.虽然网络上已经有很多现成的例子,但是一则仅仅适用于浮点型的数据,另一方面,在实现上也有一些尚可优化之处. 色彩模型除了最 ...

  9. DS Scheduler 0.7 发布,Linux 调度系统 - 开源中国社区

    DS Scheduler 0.7 发布,Linux 调度系统 - 开源中国社区 DS Scheduler 0.7 发布,Linux 调度系统

  10. c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)

    一.单元格内容的操作 *****// 取得当前单元格内容 Console.WriteLine(DataGridView1.CurrentCell.Value); // 取得当前单元格的列 Index ...