我们有一个Java Spring Web应用程序在kubernetes容器中运行。最终用户操作导致Web应用程序Runtime.exec一个GoLang脚本,该脚本除其他家务管理外,还可以上载文件。在我的特定情况下,文件大小约为700 mb。
我们遇到的问题是,tar此文件所需的时间非常难以预测。这可能需要20秒到10分钟之间的任何时间。
为了缩小问题的范围,我们旋转了一个kubernetes pod,只在其中运行了tar命令。
根据分配给Pod的内存量,时间差异很大。内存为4 Gig时,只需要40秒,而内存为1.5 Gig时,则可能要花几分钟。
我最多为Pod分配了1.5个内核,而功耗从未超过1个内核。
分配给Pod的512 Mb,tar命令耗时接近11秒
root@pod-69fc4988c-km99p:/tmp/test# date;time tar -cvf test.tar
somefile.tar.gz; date
Mon Jul 8 07:11:51 UTC 2019
somefile.tar.gz
real 0m11.313s
user 0m0.009s
sys 0m11.155s
Mon Jul 8 07:12:02 UTC 2019
分配给Pod的256 mb,tar命令需要将近3分钟
root@app-hosting-69fc4988c-km99p:/tmp/test# date;time tar -cvf test.tar somefile.tar.gz; date
Mon Jul 8 07:17:36 UTC 2019
somefile.tar.gz
real 2m52.003s
user 0m0.040s
sys 2m51.856s
Mon Jul 8 07:20:28 UTC 2019
考虑到我们从未像上面或docker stats所述使用所有可用内存,我不明白为什么pod内存应该成为tar占用时间的一个因素。
这里还有哪些其他pod资源可能会受到限制?