我遇到的Nginx+uwsgi的500错误解决记录

我也不知道做了什么,不过感觉也没做什么,就是改动了一下python程序,另外服务器上手动删除了mongodb的一个数据库,然后就出现了如下的问题:

先是发现客户端出现500错误,然后网页打开uWSGI Error  Python application not found错误,最后查看服务器记录发现很多 readv() failed (104: Connection reset by peer) while reading upstream, 这种记录。估计可能是因为我手动强删数据库造成服务器突然崩溃,引发的错误。看来以后要小心操作了。最好先关闭各个服务再删除东西,免得对其他程序造成影响。


怎么解决的呢?照着这帖子上的说法加的参数:http://www.vimer.cn/2012/04/%E6%9C%80%E8%BF%91%E7%9A%84%E4%B8%80%E4%BA%9B%E6%8A%80%E6%9C%AF%E6%95%B4%E7%90%86%EF%BC%8820120405%EF%BC%89.html


不过加上--pep333-input提示“/usr/bin/uwsgi: unrecognized option '--pep333-input'” 就给去掉了,在服务器上直接service server restart貌似没啥效果,还是要重启一下。

终于回来了,擦,吓死我了


摘抄部分如下:

uwsgi报readv() faild

用uwsgi+nginx搭建的server,发现当用post请求时,会返回数据超时。查了一下uwsgi的error.log:

1
9825#0: *745262 readv() failed (104: Connection reset by peer) while reading upstream, client: 121.14.96.125

后来在网上搜了一下文档:
http://comments.gmane.org/gmane.comp.python.wsgi.uwsgi.general/1021

其解释说解决方案有两种:
在uwsgi执行参数上增加:

1
2
--pep333-input
--post-buffering 4096

试了一下,只有第二种有效,所以由于google了一下命令的具体含义:

post-buffering
打开http body缓冲, 如果HTTP body的大小超过指定的限制,那么就保存到磁盘上.

参考链接:
http://simple-is-better.com/news/301

OK,就是这样~





uwsgi配置也贴过来:(http://zhiwei.li/text/2011/05/uwsgi%E9%85%8D%E7%BD%AE/)


uWSGI配置

2011-05-30

post-buffering
打开http body缓冲, 如果HTTP body的大小超过指定的限制,那么就保存到磁盘上.

ini配置
[uwsgi]
post-buffering = 8192

命令行配置
–post-buffering 8192

post-buffering-bufsize
设置在post缓冲时的 内部缓冲区大小(分配用于读取socket 流的chunk的大小)

post-buffering-bufsize 65536 将 分配64K的内存,作为 socket recv()函数的缓冲区. 对于128K的body, 需要两个循环/两次系统调用

async
打开异步模式

在10s钟内没有活动就关闭连接
–socket-timeout 10 (默认是4s)

buffer-size
为分析uwsgi包准备的内部缓冲区大小,默认是4K
–buffer-size 32768

-s 指定unix socket路径或者tcp 的地址和端口号
-p worker进程数量
-d daemonize
l





你可能感兴趣的:(nginx,500,uwsgi)