测试zlog写入速度,对短日志不利

bytecache 发布于 2013/11/21 15:47
阅读 649
收藏 0

zlog使用手册提到25万条日志每秒的速度,我实测了一下,结果比标称还要好,可以达到50万条每秒。

这个速度和单条日志长度无关,我尝试了32字节、64字节、和128字节的日志长度,发现都在50万条每秒左右。这样短日志的吞吐量就不如长日志。我猜测这是磁盘IO次数所限?zlog有没有手段缓存日志来减少IO次数(例如,每2M写一次磁盘),从而提升短日志的吞吐量?

我看到有buffer min和buffer max的设置,但手册提到这是为单条日志设计的,不是很理解其中目的。

加载中
0
难易
难易

目前没有缓存,每次在内存中生成单条日志,然后write()到文件中

缓存设计非常困难,因为zlog被设计成处理动态日志文件名,每次写日志的时候,无法假定这次写的日志路径是否和上一次一样。

0
bytecache
bytecache

Hi @难易 ,谢谢你的回复。仔细看了一下zlog手册(也不是很仔细),如果我没理解错动态路径有两种,一种是转档,一种是根据规则输出到不同的日志文件(如error输出到error.log)。如果是这样,我们是不是可以为一个fd分配一块缓存?

不过我发觉用户自定义输出应该可以解决这个问题,只要单条日志和路径交给用户,用户完全可以自己解决缓存问题。不知我理解对不对。

最后,zlog真的很棒,特别是cat, level和rules三者的设计很优雅,也非常灵活。我现在的项目也不依赖海量的日志,上面的问题没有大影响。

0
难易
难易

很高兴你喜欢zlog,

前段时间想写zlog 2.0就是想解决这个问题,给fd分配缓存,

并通过配置来指定每个规则用的缓存策略是怎么样的,达到性能和安全性的平衡

目前2.0搁浅,有机会也许会继续做下去

0
宏哥
宏哥

帮宏哥测测宏哥日志系统:

/*
 * This is Micro or printing the log messages
 */
#ifndef cDPRINTF_h
#define cDPRINTF_h

#define LOG_INFO 1
#define LOG_NOTICE 2
#define LOG_DEBUG 4
#define LOG_FATAL 8
#define LOG_ALL 15

extern int g_debug_level;

#if defined(_MSC_VER)
#define D_PRINTF(log_level,__VA_ARGS__){\
    if((g_debug_level|LOG_FATAL )& log_level){\
        fprintf(stderr,__VA_ARGS__); \
    }\
}
#else
#define D_PRINTF(log_level,arg...){\
    if((g_debug_level|LOG_FATAL )& log_level){\
        fprintf(stderr,arg); \
    }\
}
#endif

#endif



返回顶部
顶部