程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

Python在Linux服务器上的日志记录速度非常慢…但是在Linux开发VM上的日志记录速度很快?

发布于2019-10-14 21:15     阅读(672)     评论(0)     点赞(10)     收藏(2)


使用完全相同的代码,每次调用服务器上的logger方法(例如logger.debug)大约需要50毫秒,而在开发机上则少于1毫秒。记录器以一点点格式化输出到文件。

除了日志记录速度降低之外,服务器的速度是其两倍。

我正在Windows 7的VMWare内部运行的Ubuntu 11.04(Gnome)上进行开发。服务器正在运行Ubuntu Server 11.04(无GUI,纯控制台)。日志记录模块是官方的“日志记录”模块(“导入日志记录... logger = logging.getLogger('mylogger')”)。

知道是什么原因造成的吗?实在令人沮丧!

谢谢你的帮助!

编辑:两台机器返回其版本的“ Python 2.7.1+”。两台机器都运行64位Ubuntu。

硬盘配置服务器是软件RAID-1,而在开发计算机中只有一个驱动器。

EDIT2:接受了Fabian的回答,尽管它并不能完全解决问题,但还是很彻底的。

解决方案:写入控制台周期非常慢。我测试了将X写入文件,然后将X写入控制台,这比控制台慢了大约100倍。我不知道为什么会这样,但是我只是用另一台计算机上的ssh运行了我正在运行的东西,一切都解决了。


解决方案


如评论中所述,可能的原因是开发VM和生产计算机之间的磁盘速度不同。例如,两个系统中是否都具有相同类型的驱动器?SSD,SATA与SCSI,主轴速度和缓存等等?您的环境在IO方面有很大不同。桌面Windows和VMWare将使用激进的磁盘缓存,而您的生产Linux机器可能会出于安全考虑而出错,并等待更频繁地将数据提交到磁盘。也许Windows计算机在没有优化的情况下运行时,其驱动程序更适合其所拥有的磁盘类型?文件系统的差异也很明显,并且硬件的差异可能足以导致IO速度显着差异。您还可能在CPU和RAM速度上有很大差异。如今的台式机通常更关注原始速度,而服务器硬件将更关注可靠性。您最了解自己的设置,因此您可以在硬件性能方面比较这两个系统。

除此之外,您还可以通过以下方法了解实际情况:

首先,编写一个MWE以测试日志记录。您应该以实际代码为基础,并以类似方式使用日志记录,但这是一个小示例:

import logging

logging.basicConfig(filename="test.log", level=logging.DEBUG)
logger = logging.getLogger("testlogger")

for i in range(0, 1000000):
    logger.info("iteration: %d", i)

然后在开发和生产计算机中的cProfile下运行脚本。请确保登录到与问题情况相同的文件系统,否则结果将不适用。

python -m cProfile testlogging.py

您将获得如下所示的输出:

57000501 function calls in 137.072 seconds

Ordered by: standard name

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
    1    0.000    0.000    0.000    0.000 UserDict.py:4(__init__)
    1    0.000    0.000    0.000    0.000 __init__.py:1044(_fixupParents)
    1    0.000    0.000    0.000    0.000 __init__.py:1085(Logger)
    2    0.000    0.000    0.000    0.000 __init__.py:1100(__init__)
    1    0.000    0.000    0.000    0.000 __init__.py:1112(setLevel)
.....    .....    .....    .....    ..... ...............................

这应该使您了解导致生产机器运行缓慢的原因。特别要注意的事情:

  • 寻找线阅读{method 'write' of 'file' objects}{method 'flush' of 'file' objects}这将告诉您Python花了多少时间写文件并将数据刷新到磁盘(在本例中为日志文件)。这两台机器之间有显着差异吗?如果是这样,那绝对是IO(磁盘)速度上的差异。然后,您应该查看服务器的磁盘设置,看看是否有什么可以做的以获得更好的磁盘性能。
  • 查找第一percall列特别大的行。此列是在该函数中花费的总时间除以对该函数的调用次数。比较两台机器,您可能会发现造成差异的原因。
  • 查找tottime列特别大的行。此列是该功能花费的总时间。同样,比较两台机器,您可能会发现速度差异的一些原因。

如果发现磁盘IO似乎是问题所在,则可以仅对文件进行原始写入即可进行其他测试。您可能会找到一个基准测试程序来测试磁盘吞吐量,但是您也可以只编写一个简单的C(或Python)程序,该程序将未格式化的数据写入文件,以确保它确实是纯磁盘性能。

最后一点:性能测试就像编程一样,是艺术,科学和工程的结合,尽管您可以遵循一些模式和建议,但每种情况都需要一些创新才能破解。因此,请尝试尝试,确保自己不要自欺欺人,玩得开心!祝好运!



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/136840/a73e6d6bec2d6bcb38a1/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

10 0
收藏该文
已收藏

评论内容:(最多支持255个字符)