zlog是不是配置问题,导致CPU占用率较高

发布于 2021-11-18 01:31:21 字数 1735 浏览 816 评论 7

我的程序中原本通过write记录日志(不缓存,因为文件是按照小时生成,所以每小时才打开、关闭一次),测试时日志记录在12000条/秒,每条日志不超过128字节,CUP占用率在2~27%之间,很多时候维持在5%。后面文件记录都修改为zlog,但CPU都在90%以上,不知道是因为配置文件写的不对? zlog的配置摘录如下:

[global]
strict init = true
reload conf period = 10M


buffer min = 1024
buffer max = 2MB


#rotate lock file = /tmp/zlog.lock
rotate lock file = self
default format = "%d( %F %T.%l) %-6V (%c:%F:%L) - %m%n"


file perms = 600
fsync period = 1K


[levels]
TRACE = 10
CRIT = 130, LOG_CRIT


[formats]
simple = "%m%n"
normal = "%d(%T) %m%n"
debug  = "%d(%F %T) %-6V [ %c:%F:%L ] - %m%n"


[rules]
default.*               >stdout; simple


*.*                     -"%12.2E(HOME)/log_dir/%c.log",
                        1MB * 12 ~ "%E(HOME)/log/%c.%D(%F) #2r #3s.log";
                        simple

my_.!INFO               >stderr;
my_recv.INFO            "recv_%d(%F_%H).log" ; normal
my_lost.INFO            "lost_%d(%F_%H).log" ; normal
my_send_succ.INFO       "send_succ_%d(%F_%H).log" ; normal
my_send_fail.INFO       "send_fail_%d(%F_%H).log" ; normal
my_dug.!INFO            "run_err_%d(%F).log" ; debug
my_mice.*               $record_func , "record_path%c"; normal

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

绝影如岚 2021-11-19 11:46:24

嗯,在我的机器上,能达到25万条/秒,同时CPU跑到100%

眼眸 2021-11-19 11:20:35

程序中声明了5个 zlog_category_t,在配置中也有5类规则。

测试程序通过调整数据下发速度(目前14000条/秒,每条规则不超过128字节)给我的程序发生数据。 在这种情况通过top 查看CPU的占用情况的。

顾挽 2021-11-19 10:53:07

不太可能,因为zlog的功能比write要复杂,做了更多的事情。

经过分类匹配、在内存中动态拼整个串,最后调用write来输出。 

功能灵活+性能高+安全性高=常数。我只能尽量降低这个常数,但我不可能比write还要快(如果不考虑异步IO的话)

如果zlog你用管道输出到cronolog之类的程序的话,还能进一步加快速度,但不会让cpu降的更低。实际上,cpu在30%,恰恰说明zlog这时候更多是的在等待io,否则cpu会跑满。

你的应用是cpu敏感型的吗?还是说只是一个测试程序?

彼岸花ソ最美的依靠 2021-11-19 09:31:57

我知道了,是strftime无法缓存的问题。

因为一条日志的事件要经过多种日期格式,内部无法缓存strftime的结果,只能每次去生成。

把你的日期格式改为%D

normal = "%D %m%n"

可以加速。

这个也是zlog困扰我的问题之一。

对于单条日志的事件的处理生命周期里面,考虑多线程的情况,无法较好的缓存strftime的结果。

绝情姑娘 2021-11-19 08:35:15

你的cpu是什么型号的?

我在自己的笔记本上测试,cpu倒不是很高,系统资源主要消耗在IO上

一笔一画续写前缘 2021-11-18 14:02:18

还有同时加了#r #s是有问题的。。只能加一个

带上头具痛哭 2021-11-18 05:46:01

*.*                     -"%12.2E(HOME)/log_dir/%c.log",

                        1MB * 12 ~ "%E(HOME)/log/%c.%D(%F) #2r #3s.log";

                        simple

这一行是比较慢的,每次write都要等待数据写入硬盘才返回,把前面的-号去掉试试看。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文