繁体   English   中英

控制台输出消耗多少CPU? (每秒约140行)

[英]Console output consuming much CPU? (about 140 lines per second)

我正在写本科学位论文,当时我编写了一个程序,该程序分布在许多服务器上,并通过IPv6多播和单播来交换消息。 网络使用率相对较高,但我认为当测试中有15台服务器时,每秒会有2个请求,这并不是很高:

服务器1通过多播向服务器3-15请求信息。 3-15岁的每个人都必须做出回应。 如果在0.5秒后缺少一个响应,则重新发送多播,但是只有丢失的服务器必须响应(因此,在大多数情况下,这只是一台服务器),服务器2完全相同。 如果5次重试后仍缺少结果,则将丢失的服务器标记为无效服务器,并将更改与其他服务器同步(1/2)

因此,每秒有2个多播,每秒有26个单播。 我认为应该不应该太多吗?

服务器1和2正在运行python Web服务器,我用来在每个服务器上每秒(通过Web客户端)发出请求

整个szenario在mininet环境中运行,该环境在具有2个核心(最大2.8ghz)和1GB RAM的虚拟盒子ubuntu中运行。 在运行测试时,我通过htop看到CPU占100%,而RAM占50%。 因此,CPU是这里的瓶颈。

我注意到2-5分钟(1分钟= 60 *(2 + 26)消息= 1680消息)之后,丢失了太多结果,导致新请求进入时发送重复次数过多,因此“管理服务器”认为客户端服务器(3-15)已关闭并注销了它们。 与其他管理服务器同步后,所有客户端服务器在两个管理服务器上都标记为已失效,这是不正确的...

我想知道问题是否出在我的调试输出上? 我为发送和接收的每条消息打印3-5条消息。 这样就差不多了(让我们猜每个发送/接收的消息是5条消息)(26 + 2)* 5 =在控制台上打印的140行。

我将python 2.6用于服务器。

因此,这里的问题是:控制台输出会降低整个系统的速度吗,因为简单请求连续5次要花费0.5秒以上的时间? 在我的测试中,请求处理很简单。 没有复杂的计算或类似的东西。 基本上,它类似于“在[“ bla”,“ blaaaa”,...]中返回return_param(5个项目的清单)

如果是,如何完全禁用输出而不必注释掉每个打印语句? 或者甚至有可能只输出包含“错误”或“警告”的行? (不是通过grep,因为当grep变为活动状态时,所有打印都已经完成了……我的意思是直接在python中)

还有什么可能导致我的申请这么慢? 我知道这是一个非常笼统的问题,但也许有人已经对mininet和网络应用程序有了一些经验...

我终于找到了真正的问题。 这不是因为打印(删除它们会稍微改善性能,但不是很明显),而是因为线程使用了共享锁。 此锁在多个CPU内核上共享,导致整个过程非常缓慢。

我添加到执行虚拟机中的内核越多,速度就越慢,这很奇怪。

现在,新的瓶颈似乎是APScheduler ...我总是收到诸如“事件丢失”之类的消息,因为调度程序上的负载过多。 所以这是下一步要加快的速度... :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM