FITURE

If you can fight, fight.

首页 >> 分享>>一个Nginx 500错误,引发的血案(Mongodb journal 日志太大)

一个Nginx 500错误,引发的血案(Mongodb journal 日志太大)

Posted by fiture / 2013年06月03日 / 分享

分享下工作中遇到的问题,记录下来,方便自己或者有需要的人以后翻看。

网站还未正式上线,突然不能访问了,出现500错误。因为nginx只是拿来做反向代理的,看看backend的Node服务log,发现正常没有任何的错误日志记录。再看看nginx的日志记录发现了类似下面的东东:

2013/06/03 08:25:28 [crit] 21109#0: *23885 pwrite() "/var/lib/nginx/body/0000001016" failed (28: No space left on device), client: 118.114.xxx.xxx, server: xxx.com, request: "POST /xxx/xxx/ HTTP/1.1", host: "xxx.com", referrer: "http://xxx.com/xxx/"

基本上可以确定是这个东东(No space left on device)的问题,难道磁盘被占满了?

$ df -m

Filesystem            1M-blocks  Used Available Use% Mounted on
/dev/xvda1               18891 17446       486  100% /
udev                        489     1       489   1% /dev
tmpfs                       200     1       199   1% /run
none                          5     0         5   0% /run/lock
none                        498     0       498   0% /run/shm
/dev/sda1                   228   173        44  80% /boot

果然磁盘空间被占满了,o(╯□╰)o。。。初步怀疑是nginx的日志,可是查看nginx的日志文件大小,没有多大啊,那到底是什么这么东西占用了这么大的空间呢?还是继续看看磁盘空间的占用情况吧:

$ sudo du -sh /*

0	/proc
56K	/root
184K	/run
7.9M	/sbin
4.0K	/selinux
167M	/srv
0	/sys
278M	/tmp
1.1G	/usr
5.6G	/var

一个5GB的东东,格外引人注目,继续看~:

$ sudo du -sh /var/lib/*

2.6M	./mlocate
5.1G	./mongodb
1.4M	./nginx
此处省略几千行……

OK,原来是Mongodb惹的祸,这东西居然这么大,继续看下去就找到了,mongodb的日志文件,3个多GB:

$ sudo du -sh /var/lib/mongodb/*
1.1G ./j._0
4.0K ./lsn
1.1G ./prealloc.1
1.1G ./prealloc.2

找到了问题,痛哭流涕啊,原来没有是莫有摸清楚mongodb这货,让网站500了。但是/var/lib/mongodb/journal/目录下面的东东,可不可以随便删除呢?
So,google了解决mongodb journal日志文件过大的解决方法,答案是可以删除,原来mongodb提供小日志文件记录的配置--smallfiles。参考如下方法解决问题:

$ sudo cp -p /etc/mongodb.conf /etc/mongodb.conf.orig
$ sudo vi /etc/mongodb.conf
$ sudo service mongodb stop
$ sudo rm -rf /var/lib/mongodb/journal/*
$ sudo service mongodb start

重启后,/var/lib/mongodb/journal/下面的预设文件会自动重建,所以你尽管删除吧,如果这些日志文件对你来说已经没啥用了。

重启nginx,重启mongodb,问题解决,顿时轻松~

更多请mongodb配置,请参考:

http://docs.mongodb.org/manual/core/journaling/#journaling-internals

http://docs.mongodb.org/manual/reference/program/mongod/#cmdoption-mongod–smallfiles

一个Nginx 500错误,引发的血案 到处结束。:)

最近有种无精打采的感觉,工作没激情,自身成长缓慢,不知道该咋办,哎。╮(╯▽╰)╭

5条回应:“一个Nginx 500错误,引发的血案(Mongodb journal 日志太大)”

  1. […] 突然反应过来,从上次《一个Nginx 500错误,引发的血案(Mongodb journal 日志太大)》第一反应怪nginx,这次又第一想到的是架设在前端的nginx“惹得祸”啊,其实是自己太菜,不是很懂nginx,而已,nginx辛勤劳作,默默工作,她是无辜的。囧。 […]

  2. w@nt说道:

    程序就是不断的耗费大量的精力,只是有的成功,但是成功的又有多少呢?
    对得起自己~

  3. So Simple说道:

    谢谢博主把这个共享出来,我看到3.1G的journal也是吓尿了。

  4. 梓梓梓蓝说道:

    赞~ Google引来~ 看头像有点眼熟~

发表评论

电子邮件地址不会被公开。 必填项已用*标注