【问题标题】:Foxx app seems not compiledFoxx 应用程序似乎未编译
【发布时间】:2016-02-18 20:31:23
【问题描述】:

我在 PC Ubuntu 和 Mac 上使用 ArangoDB 有一段时间了,没有任何问题。 一般来说,我的 Foxx 应用程序在 Mac 上的运行速度是 PC 上的 4 到 5 倍。

我在两台机器上都传递了 2.7.3 版本。 现在 Mac 比 PC 慢。 更糟糕的是,与应用程序处于“生产”或“开发”模式相比,她的工作速度相同。 我对“生产”模式编译的真实性有疑问。但是,“foxx-manager list”命令根据选择的模式返回“true”和“false”。

有没有办法检查应用程序的脚本在编译模式下是否运行良好? 建议?

【问题讨论】:

  • 回几个问题:您如何确定应用程序运行“慢”还是“快”?您是否正在测量客户端通过 HTTP/HTTPS 调用应用程序的往返时间?是否涉及任何网络,或者到处都是“本地主机”?应用程序代码是否取决于集合或文档的数量,您是否在大约运行它。两台机器上的相同数据集?机器是否有足够的内存将工作数据保存在 RAM 中?
  • “production”模式表示是否已经通过require加载了app模块,所有app路由都将保留在缓存中。 “开发”模式意味着您的应用程序中的每个“要求”实际上都会重新编译模块,并且应用程序路由将在每个 HTTP 请求上重新构建。这使您的应用程序保持最新,但肯定有开销,不应该在生产中使用。但我不清楚所有执行时间都花在了哪里:加载应用程序还是执行应用程序代码?例如。瓶颈可能在应用程序的代码内部,甚至可能不受生产/开发设置的影响。
  • 我通过同时观看两台机器的日志来比较速度。两者都使用本地数据(CouchDB - > python - > ArangoDB)执行相同的代码。在升级到 2.7.3 版本之前,我已经将 Mac 升级到 El Capitan。由于我已经用 Homebrew 安装了 ArangoDB,所以我昨天决定卸载所有东西(CouchDB、ArangoDB、python ……),然后专心地重新开始。今天一切都准备好了,同样的代码,同样的数据。结果是一样的。缓慢。我在 Homebrew 附近找不到任何解释(问题……) ArangoDB 附近的任何东西(stackoverflow、Google 组……)
  • 从描述中仍不清楚瓶颈在哪里:有 CouchDB、Python 和 ArangoDB 运行,还有一个内部未知的 Foxx 应用程序。为了使测量更具体到 ArangoDB,是否可以让客户端程序(arangosh、curl)仅在 ArangoDB 中发出对 Foxx 应用程序的调用并对其计时?这应该让您了解当前的吞吐量,如果您认为它太慢,我们可以寻找改进方法(但这可能涉及查看当前未知的 Foxx 应用程序代码)。
  • 默认情况下,ArangoDB 有几个 V8 上下文,由工作人员轮询选择。在 2.7 中,foxx 服务是在首次访问时加载的,因此您可能会看到它们在每个上下文中首次访问需要更长的时间。如果您想获得可比较的数字,您需要在开始实际测试之前通过多次访问该 foxx 服务来预热该服务,或者将可用 javascript 上下文的数量设置为 1:--javascript.v8-contexts=1(不建议用于生产环境)以了解访问它一次将准备好所有上下文。

标签: arangodb


【解决方案1】:

很抱歉,我无法分享我的数据。
这是我在两台机器上用来测试 CouchDB 和 ArangoDB 访问的代码。它是极简的,在 CouchDB 和 ArangoDB 上都没有引入个人代码,使用 HTTP 并在本地工作。

import requests
import time

LOOP = 500

CDB_SESS = requests.Session()
CDB_SESS.stream = False
CDB_SESS.headers.update({'content-type': 'application/json; charset=utf-8'})

ADB_SESS = requests.Session()
ADB_SESS.stream = False
ADB_SESS.headers.update({'content-type': 'application/json; charset=utf-8'})

if __name__ == '__main__':
    print 'CouchDB'
    START = time.time()
    for x in range(LOOP):
        _rsp = CDB_SESS.get('http://localhost:5984/')
        value = _rsp.json()
    STOP = time.time()
    print (STOP - START)

    print 'ArangoDB'
    START = time.time()
    for x in range(LOOP):
        _rsp = ADB_SESS.get('http://localhost:8529/_db/_system/_api/version')
        value = _rsp.json()
    STOP = time.time()
    print (STOP - START)

两个循环的区别仅在于使用的 url。数据库只运行内部代码,不是我的,对吧?
如果瓶颈来自 Python 或 Requests,这一个在两个数据库上的行为方式相同,是否不合理?

今天我把PC放在一边,在MAC上工作。
我卸载了 ArangoDB (brew uninstall arangodb) 并清理了目录 var/lib 的内容。 然后我重新安装了它(brew install arangodb),没有传输我的数据或任何 Foxx 应用程序。 全新安装。我唯一的操作是修改 v8-contexts=1。

我启动了上面的测试,3 次。结果如下:
- CouchDB:1.54s、1.49s、1.49s
- ArangoDB:1.05s、1.04s、1.05s

结果与之前获得的结果相同。
我是否必须证明我的数据(不存在)或我的 Foxx 应用程序(不存在)?

【讨论】:

  • 因为 couchdb 很难安装在 jessie 上,尝试使用返回 arangodb 版本 json 的常规网络服务器:nginx 0.469 0.389 0.389 Arango 0.360 0.357 0.423 - 为什么要解析 json?你不想衡量python json解析器的性能,对吧?
  • 测试 itzpapalotl foxx 应用程序:http://127.0.0.1:8529/_db/_system/itz/random 值范围在 0.70 左右 - 也没有那么糟糕?
  • Intel(R) Core(TM) i7-3820 CPU @ 3.60GHz,4+4 核,32G Ram,Debian Jessie,库存内核,ArangoDB 2.8 发行包,无特殊配置。
  • 今天我擦除了硬盘并在MAC上重新安装了一个新系统,只有ArangoDB。 Afficher ArangoDB REST API 接口页面需要 1 ' 30。PC 在那里发布(显示)他(它)3 秒。问题必须来自自制软件的公式。我刚刚发布了一个结果(退出)。感谢您的支持
【解决方案2】:

我做了一些测试。
我在两台机器上使用的版本相同:
- CouchDB 1.6.1
- ArangoDB 2.7.3
- 请求 2.9.1
蟒蛇除外:
- PC 2.7.6
- MAC 2.7.11

两台机器上的测试代码是相同的。我启动它们 3 次,以防万一。 CouchDB 和 ArangoDB 上的数据在 PC 和 MAC 上完全相同。

第一个测试是仅在 CouchDB 上读取 500 条记录的循环(我的来源):
- 在 PC 上:53.36s、53.66s、53.59s
- 在 MAC 上:5.70s、5.86s、6.01s
MAC 它是 9-10 倍的速度。减速不是来自我的数据源,对吧?

第二个测试是 CouchDB 上 500 'http://localhost:5984/' 和 ArangoDB 上 500 'http://localhost:8529/db/ system/_ api/version' 的循环。我的代码没有干预,对吧?: 在电脑上:
- CouchDB:20.02s、20.01s、20.01s
- ArangoDB:0.48s、0.37s、0.38s
“哪个是你的版本?”的速度差异大约是 40。

在 MAC 上:
- CouchDB:1.48s、1.49s、1.61s
- ArangoDB:1.07 秒、1.07 秒、1.13 秒
区别在哪里?

【讨论】:

  • 说实话,从您提供的信息中没有任何线索。你能分享有问题的代码和数据吗?其他一切都将与看咖啡壶算命一样准确。
  • 总结一下:您说 CouchDB 在您的 Mac 上比您的 PC 快 10 倍。然后你说通过 HTTP 获取 CouchDB 的版本标签在 Mac 上比在 PC 上快 10 倍多一点。然后通过 HTTP 获取 ArangoDB 的版本标签在 Mac 上的速度大约是 PC 上的两倍。这可能意味着很多事情,例如CouchDB 的 Mac 版本可能比他们的 PC 版本更优化。这也可能意味着两台机器无论如何都具有非常不同的性能特征。让我们关注慢的(即 Mac)并尝试找出它慢的原因。
  • 请注意,我建议如何在Github issue 1692 中继续,这似乎已被您打开。这建议尝试使用 ArangoShell 测量单个请求,然后测量多个请求。通过这种方式,我们可以排除许多因素,例如 CouchDB、Python 等,如果 ArangoDB 是问题,这些因素只会分散问题的注意力。但我们需要先找出这一点,并系统地去做。
【解决方案3】:

经过大量研究和讨论,我们发现了两个问题:

  • 我们用于 API 文档的swagger.io 在 safari 中渲染需要很长时间;我们更新到了更新的版本。
  • Apple 使用 El Capitans xcode 和 clang 引入了性能回归,可将 ArangoDB 的速度降低多达 7 倍。使用较旧的 xcode 或 GCC 不会产生缓慢的二进制文件。latest formular now strongly discourages using clang

进一步讨论in github issue #1629

【讨论】:

    猜你喜欢
    • 2021-03-18
    • 1970-01-01
    • 2018-05-22
    • 1970-01-01
    • 1970-01-01
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多