- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 raven 和 getsentry 在 django 中记录消息,但记录似乎延迟了代码的执行。例如:
# ...view code
tic = datetime.datetime.now()
logging.warning('foo warning')
toc = datetime.datetime.now()
print "log time %s, %s, %s" % (tic, toc, (toc - tic).total_seconds())
# more view code...
给出输出:
log time 2013-09-25 12:03:56.541091, 2013-09-25 12:03:57.139420, 0.598329
也就是说,在这种情况下,它会将代码的执行延迟 600 毫秒。这是可以预料的吗?我原以为消息会在一个单独的线程中异步发送,这样主代码就不会延迟。另外,我对 app.getsentry.com 的 ping 时间是 125 毫秒,所以即使消息是同步发送的,600 毫秒仍然显得异常大。有没有我可以更改的配置以加快速度?
设置文件:
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'handlers': {
'sentry': {
'level': 'INFO',
'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler',
},
},
'loggers': {
'': {
'handlers': ['sentry'],
'level': 'INFO',
'propagate': True,
},
}
}
=== 编辑 ===
感谢 Filip Dupanović 指出 threading+ 协议(protocol)。可悲的是,由于在引导 worker 时线程被复制,他们在 gunicorn 中对我不起作用。我通过在 gunicorn 配置文件中添加一个 post_fork 钩子(Hook)来修复它,如下所示:
import logging
from raven.contrib.django.handlers import SentryHandler
from raven.transport.threaded import ThreadedHTTPTransport
def post_fork(server, worker):
LOG = logging.getLogger()
for handler in LOG.handlers:
if isinstance(handler, SentryHandler):
for url, transport in handler.client._registry._transports.items():
if isinstance(transport, ThreadedHTTPTransport):
if hasattr(transport, '_worker'):
server.log.info("deleting sentry thread worker attribute")
delattr(transport, '_worker')
else:
server.log.info("sentry thread worker not present, nothing to do.")
Obv 这是一个 hack,虽然它对我有用,但我不知道它是否适用于其他任何地方。
最佳答案
如果您使用托管的 Sentry 服务,您可能会受益于切换到 Raven 完全支持的 threaded+http
传输。看看Raven's documentation关于如何在服务名称中正确配置传输。
您可能还想尝试切换到其他一些专门的并发传输或 UDP 协议(protocol)。虽然您无法将 ICMP 请求延迟与 TCP 进行比较,但是增加的开销非常可怕并且可以解决,所以不要害怕!
关于python - Django Raven 非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19003550/
Raven.Client.Authorization 的当前版本是来自 Raven.Client 的版本。新的 Raven.Clients 允许您使用最新的 Json.Net 包,因此可以使用 Res
更具体地说,在Raven DB中,我想创建一个具有如下签名的通用方法: public void Clear() {... 然后让Raven DB清除给定类型的所有文档。 我从Ayende的其他帖子中了
我只是想确定 Raven DB 使用的文件系统上的文件是否加密?有人可以直接打开文件系统上的文件并将它们从二进制直接转换为 ASCII,还是加密? 我正试图说服我们的管理层给 RavenDB 一个机会
我正在尝试将带有异常报告的附加数据传递给sentri。 测试代码 Raven.captureMessage("test", {"blabla": "blabla"}) 在sentri admin中我可
我已经配置了raven来获取错误日志,我已经在哨兵控制面板中成功获取了日志,但是设置完成后,控制台日志就消失了。 我什至尝试通过在配置时将autoBreadcrumbs设置为false,仍然没有运气
我已经installed raven-js using Bower我正在使用 captureMessage()向 Sentry 发送自定义消息。 发送其中一条消息后,我需要重新加载页面。问题是,如果我
我需要获取特定集合中的文档计数: 现有索引 Raven/DocumentCollections 存储与属于该集合的实际文档配对的集合的计数和名称。如果可能的话,我想从此索引中获取计数。 这是 Rave
我正在构建一个脚本来检查损坏的索引并重置它们,但我在本地获取损坏的索引时遇到问题。 有人知道如何强制 RavenDB 索引损坏吗? 最佳答案 要导致损坏,您可以删除头文件之一(headers.one
有没有办法查询 RavenDB 文档存储并找出陈旧索引的陈旧程度? 本质上,我想做的是将结果提供给用户,同时也让他们了解还需要完成多少索引。 这在大数据导入场景中会很好。 最佳答案 当然,你可以这样做
我有一个打开版本控制包的数据库。我进行导出,然后尝试将导出的转储导入到新创建的数据库中。我收到异常“不允许修改历史修订版”。我发现this Ayende 的问答,这是设计使然。但是,如果版本控制包已打
我在查询 RavenDB 时遇到了问题,即使是最简单的查询,可能我做错了什么,但几个小时后我就看不到它了。我用谷歌搜索了几乎所有我能想到的东西.. 我有这些实体: public class U
我使用以下日志配置在 Django 1.4 上配置了 Raven 2.0.2: 'handlers': { ... 'sentry': { 'level':'INFO'
我有一个树结构,其中的节点同时具有子指针和父指针。我在让它很好地序列化时遇到了一些问题(这将用于配置,因此它需要对操作/配置管理器有一定的可读性),并且在尝试了序列化约定和属性的不同组合之后我仍然卡住
Raven DB 可以使用哪些数据访问架构? 基本上,我想通过接口(interface)分离持久性,所以我不会将下划线存储暴露给上层。 IE。我不希望我的域看到来自 Raven DB 的 IDocum
我正在使用 raven 和 getsentry 在 django 中记录消息,但记录似乎延迟了代码的执行。例如: # ...view code tic = datetime.datetime.now(
我有这样的代码: public bool Set(IEnumerable requests) { var documentSession = _documentStore.Op
我有以下 2 个实体模型: public class Store : IModel { public string Id { get; set; }
谁能帮我加快这个查询速度?我正在使用 RavenDB 3.5.8 并且以下查询需要相当长的时间(在第一次加载时尤其如此): var query = session .Q
我正在寻找一种在 Raven DB 中生成测试数据的首选且可维护的方式。目前,我们的团队确实有办法通过 .NET 代码来做到这一点。提供了示例。 但是,我正在寻找不同的选择。请分享。 public v
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我是一名优秀的程序员,十分优秀!