2019年6月27日星期四

docker写日志导致压测过程中耗时严重问题

今天在用ab做服务的压测,发现用java直接启动,并发数为1、2、3差不多(30ms以内),并发数加到4、5之后性能才有一定下降(50~60ms)。用docker启动服务,并发请求数为1、2、3、4、5时,每次递增时延都有增加,从50ms一直升到了150ms。docker启动的服务性能远差于java直接启动的服务。
检查发现因为我的服务写日志比较多,docker会写/var/lib/docker/containers/container_id/xxx.json这个json格式的日志文件,加上原来java自己的日志文件,写了双份,同时docker会把日志转为json格式。这一过程特别消耗资源。
测试结果显示,关闭log后,并发数为5时,p95的性能直接降到了4ms,效果惊人。

补充:原来设置了两个日志,一个是同步的console日志,一个是异步的文件日志。docker会收集命令行的日志作为自己的日志存成json文件的log。试了下,关了console的日志,保留文件日志,就没有影响了。