zlog是不是配置问题,导致CPU占用率较高
我的程序中原本通过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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
嗯,在我的机器上,能达到25万条/秒,同时CPU跑到100%
程序中声明了5个 zlog_category_t,在配置中也有5类规则。
测试程序通过调整数据下发速度(目前14000条/秒,每条规则不超过128字节)给我的程序发生数据。 在这种情况通过top 查看CPU的占用情况的。
不太可能,因为zlog的功能比write要复杂,做了更多的事情。
经过分类匹配、在内存中动态拼整个串,最后调用write来输出。
功能灵活+性能高+安全性高=常数。我只能尽量降低这个常数,但我不可能比write还要快(如果不考虑异步IO的话)
如果zlog你用管道输出到cronolog之类的程序的话,还能进一步加快速度,但不会让cpu降的更低。实际上,cpu在30%,恰恰说明zlog这时候更多是的在等待io,否则cpu会跑满。
你的应用是cpu敏感型的吗?还是说只是一个测试程序?
我知道了,是strftime无法缓存的问题。
因为一条日志的事件要经过多种日期格式,内部无法缓存strftime的结果,只能每次去生成。
把你的日期格式改为%D
normal = "%D %m%n"
可以加速。
这个也是zlog困扰我的问题之一。
对于单条日志的事件的处理生命周期里面,考虑多线程的情况,无法较好的缓存strftime的结果。
你的cpu是什么型号的?
我在自己的笔记本上测试,cpu倒不是很高,系统资源主要消耗在IO上
还有同时加了#r #s是有问题的。。只能加一个
*.* -"%12.2E(HOME)/log_dir/%c.log",
1MB * 12 ~ "%E(HOME)/log/%c.%D(%F) #2r #3s.log";
simple
这一行是比较慢的,每次write都要等待数据写入硬盘才返回,把前面的-号去掉试试看。