小编gro*_*pot的帖子

Heroku零星的高响应时间

这是非常具体的,但我会尽量简短:

我们正在Heroku上运行Django应用程序.三台服务器:

  1. 测试(1网,1芹菜dyno)
  2. 培训(1网,1芹菜dyno)
  3. prod(2网,1芹菜dyno).

我们使用Gunicorngevents每个赛道4名工人.

我们正经历零星的高服务时间.以下是Logentries的一个例子:

High Response Time:
heroku router - - at=info 
method=GET 
path="/accounts/login/" 
dyno=web.1 
connect=1ms 
service=6880ms 
status=200 
bytes=3562
Run Code Online (Sandbox Code Playgroud)

我已经谷歌搜索了好几个星期了.我们无法随意复制,但每天会经历0至5次这些警报.值得注意的要点:

  • 在所有三个应用程序上发生(所有运行类似的代码)
  • 发生在不同的页面上,包括404和/ admin等简单页面
  • 随机发生
  • 发生变化的吞吐量.我们的一个实例仅驱动3个用户/天.它与睡觉的dynos无关,因为我们使用New Relic进行ping操作,并且问题可能发生在会话中
  • 无法随意复制.我亲身经历过这个问题.单击通常在500毫秒内执行的页面会导致30秒的延迟,并最终出现Heroku 30秒超时的应用程序错误屏幕
  • 高响应时间从5000毫秒到30000毫秒不等.
  • New Relic并未指出具体问题.以下是过去的几笔交易和时间:
    • RegexURLResolver.resolve 4,270ms
    • SessionMiddleware.process_request 2,750ms
    • 渲染login.html 1,230ms
    • WSGIHandler 1,390ms
    • 以上是简单的通话,通常不会接近这段时间

我把它缩小到了:

  1. 这篇关于Gunicorn和慢客户的文章
    • 我已经看到这个问题发生在缓慢的客户端,但也发生在我们有光纤连接的办公室.
  2. Gevent和异步工作者玩得不好
    • 我们已经切换到gunicorn同步工作者,问题仍然存在.
  3. Gunicorn工人超时
    • 工人可能会以某种方式保持活动状态.
  4. 工人/动力不足
    • 没有指示CPU /内存/ db过度使用和New Relic没有显示DB延迟的任何指示
  5. 吵闹的邻居
    • 在我与Heroku的多封电子邮件中,支持代表提到我的至少一个长期请求是由于一个吵闹的邻居,但不相信这是问题.
  6. 子域301
    • 请求很顺利,但在应用程序中随机被卡住.
  7. Dynos重启
    • 如果是这种情况,许多用户将受到影响.另外,我可以看到我们的dynos最近没有重启.
  8. Heroku路由/服务问题
    • Heroku服务可能比宣传的要少,这只是使用他们服务的缺点.

过去几个月我们一直有这个问题,但现在我们正在扩展它需要修复.任何想法都会受到高度赞赏, …

python django heroku gunicorn newrelic

19
推荐指数
1
解决办法
4144
查看次数

如何在OS X上使用Postgres.app启用日志记录?

山狮.通过Postgres.app安装PostgreSQL .通过PyCharm为Django使用postgres.我已经阅读了多篇关于让这个工作起来的SO和博客帖子,并且根本没有创建日志.

我的conf文件(数据目录)位于:

$ ~/Library/Application\ Support/Postgres/var/postgresql.conf
Run Code Online (Sandbox Code Playgroud)

我的postgresql.conf日志记录设置如下所示:

log_destination = 'stderr'  
logging_collector = on  
log_directory = '~/Library/Logs/Postgres' (I've also tried 'pg_log')
Run Code Online (Sandbox Code Playgroud)

试过关闭并打开Postgres.app

我也试过重启命令行服务器:

$ /Applications/Postgres.app/Contents/MacOS/bin/pg_ctl restart -D ~/Library/Application\ Support/Postgres/var/
Run Code Online (Sandbox Code Playgroud)

...但这会导致终端挂起"LOG: autovacuum launcher started"......并且日志打印到控制台.

这个SO帖子是密切相关的,但我希望Postgres.app写入日志文件,而不是打印到控制台.

任何帮助都会很棒,谢谢.

编辑:回应vyegorov,

version = PostgreSQL 9.2.2  
Run Code Online (Sandbox Code Playgroud)

postgresql.conf中不存在silent_mode

postgresql logging osx-mountain-lion psql

13
推荐指数
1
解决办法
4038
查看次数

如何在Heroku上执行python脚本?

我有一个python脚本,我只需要运行一次(我不想将它提交到repo发送到Cedar实例).

脚本通过我的Django模型聚合数据并输出.csv文件.

通常在AWS中,我将scp脚本连接到服务器manage.py shell < script.py,并将scp生成的.csv返回到我的机器.

我知道Heroku文件系统是短暂的,但是有没有办法在Heroku服务器上检索生成的文件而不将它们上传到S3?

这是我最好的镜头:

cat script.py | heroku run manage.py shell --app appname
Run Code Online (Sandbox Code Playgroud)

适用于单行脚本,但不适用于换行符.

此外,上面的脚本只会产生命令行输出,而不会返回.csv文件.

python csv django heroku

5
推荐指数
1
解决办法
4214
查看次数

Django 测试 commit_on_success

我有一个函数,我已经将其封装@transaction.commit_on_success并在其上运行 Django 单元测试。

该函数太长无法粘贴,但一些伪代码是:

@transaction.commit_on_success
def func():
  order = Order.create()
  order.save()
  OrderItem.create(order=order)
  test = 10/0 # make sure we run into an error
Run Code Online (Sandbox Code Playgroud)

然后在我的单元测试中我检查是否 len(Order.objects.all()) == 0

我的函数正在返回一个有效的 Order 对象,因此正在提交事务。

我在这里做错了什么?

编辑:我在 Django 1.5

python django django-database django-unittest

4
推荐指数
1
解决办法
2947
查看次数

Python:更新参考值

以下是我认为应该如何工作的:

dictionary = {'k1': {'a': 'b'}, 'k2': [0, 1]}  
pointer = dictionary['k1']  
print pointer  
>>> {'a': 'b'}  
pointer.update({'a': 'c'})  
print dictionary  
>>> {'k1': {'a': 'c'}, 'k2': [0, 1]} 
Run Code Online (Sandbox Code Playgroud)

以下内容让我感到沮丧:

pointer = dictionary['k2']
print pointer
>>> [0, 1]
pointer.update([2, 3])
>>> AttributeError: 'list' object has no attribute 'update'  
Run Code Online (Sandbox Code Playgroud)

我知道 list 没有更新功能,并且知道我可以执行以下操作:

pointer[0] = 2
Run Code Online (Sandbox Code Playgroud)

...但我想要一个更通用的选项来更新参考值,因此该对象仍然属于字典,但值已更改。

这样做的原因是我有一个嵌套的字典,看起来像:

dictionary['key']['key']['key']['key'] 
Run Code Online (Sandbox Code Playgroud)

我的问题不是针对列表是否具有更新功能——而是我问的是是否有一种更简洁的方法来引用和更改深度嵌套字典中的值,以便将其存储在参考值中会更好而不是每次我想给它分配一些东西时都把它全部打出来。

谢谢!

编辑:第一个示例中的固定语法
EDIT2:让我说清楚:我知道列表没有update函数,而是询问通用参考值更新
EDIT3:简化问题

python dictionary pointers reference mutability

2
推荐指数
1
解决办法
4691
查看次数

TZ数据库和多个美国时区

我使用pytz将时区与我的用户配置文件相关联.最初我认为它只包括PST,CST,EST等时区,但是当我运行时,pytz.country_timezones('US')我会收到以下列表:
[u'America/New_York', u'America/Detroit', u'America/Kentucky/Louisville', u'America/Kentucky/Monticello', u'America/Indiana/Indianapolis', u'America/Indiana/Vincennes', u'America/Indiana/Winamac', u'America/Indiana/Marengo', u'America/Indiana/Petersburg', u'America/Indiana/Vevay', u'America/Chicago', u'America/Indiana/Tell_City', u'America/Indiana/Knox', u'America/Menominee', u'America/North_Dakota/Center', u'America/North_Dakota/New_Salem', u'America/North_Dakota/Beulah', u'America/Denver', u'America/Boise', u'America/Phoenix', u'America/Los_Angeles', u'America/Metlakatla', u'America/Anchorage', u'America/Juneau', u'America/Sitka', u'America/Yakutat', u'America/Nome', u'America/Adak', u'Pacific/Honolulu']

另外:
pytz.all_timezones== 582 pytz.common_timezones== 432

我住在德克萨斯州,总是选择芝加哥,因为这就是互联网的运作方式,但现在我必须考虑到这一点,我真的很困惑我们应该在我们的应用程序中使用哪些时区,哪些是多余的.例如,America/Kentucky/LouisvilleAmerica/Kentucky/Monticello相同 - 为什么它们都存在?我知道这与印第安纳州的历史时区惨败有关,但为什么数据库没有更新以删除冗余?

我从来没有住在印第安纳州所以我不知道居民习惯于看到什么时区.另外由于像亚利桑那州这样的异常人员没有参与DST,它并不像仅包括PST,CST等那么简单.

是否有一些正式的TZ数据库时区子集可以解释所有美国居民?

python django timezone pytz

1
推荐指数
1
解决办法
223
查看次数