Rails [已解决] Incomplete response received from application

hxh1246996371 · 2015年07月02日 · 最后由 hxh1246996371 回复于 2015年07月02日 · 5034 次阅读

网站配置是 nginx+passenger,上传小文件没问题,上传 1M 以上的文件就报这个错了。

nginx 部分配置是

keepalive_timeout  65;
 passenger_max_pool_size 6;
 client_max_body_size 10m;

nignx 中的日志是:

2015/07/02 11:40:59 [error] 11176#0: 908849 open() "/root/demo/upload/UploadAction" failed (2: No such file or directory), client: 121.28.35.197, server: XXXX, request: "POST /upload/UploadAction HTTP/1.1", host: "XXXX", referrer: "XXXX/html5up-150127225933/" App 11183 stderr: [ 2015-07-02 11:41:03.0486 11205/0x0000000257cfe0(Worker 1) utils.rb:85 ]: ** Exception Errno::ENOSPC in Rack application object (No space left on device @ io_write - /tmp/RackMultipart20150702-11205-1jpgg8n.zip) (process 11205, thread 0x0000000257cfe0(Worker 1)):

2015-07-02 11:41:03.0491 11163/7fb9c2083700 age/Hel/Req/Utils.cpp:89 ]: [Client 1-2493] Sending 502 response: application did not send a complete response 2015/07/02 11:41:03 [error] 11176#0: *909061 recv() failed (104: Connection reset by peer) while reading upstream, client: 61.51.222.47, server: XXXX, request: "POST /upload/pluginzip HTTP/1.1", upstream: "passenger:unix:/tmp/passenger.a5MmWLs/agents.s/server:", host: "XXXX", referrer: "XXXXX"

找不到问题在哪儿

行了一下 RAILS_ENV=production rails s。报了 No space left on device @ io_write - /tmp/RackMultipart20150702-12574-nt8fg4.zip。看来不是nginx的问题。

df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1       20G  8.2G   11G  44% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            990M  4.0K  990M   1% /dev
tmpfs           201M  400K  200M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none           1001M     0 1001M   0% /run/shm
none            100M     0  100M   0% /run/user
overflow        1.0M   72K  952K   8% /tmp

上传文件和这个 /tmp/ 目录有什么关系么

文件要上传先写入临时目录,上传完毕后再做进一步处理。 你/tmp 才给 1M,当然妥妥爆掉了。

#2 楼 @msg7086 的确。百度了一下。

df -k /tmp

显示

overflow            1024     0      1024   0% /tmp

也就是说此时 tmp 只有 1M,这就是文件上传失败的原因,出现这种情况基本都是因为服务器曾经磁盘过载过。

解决方法:

sudo umount -l /tmp

#3 楼 @hxh1246996371 原来如此,学到了(

之前服务器因为日志太大曾经爆过一次,所以系统就给我挂载了这个 1M 的 /tmp

需要 登录 后方可回复, 如果你还没有账号请 注册新账号