vps 用的是 512M 的内存,服务器系统用 ubuntu, 除了装 ruby ,rails, mysql, nginx 等必要的软件,其余什么都没装。就运行一个网站 上午用户反应打不开,在后台 ssh 登录要 2 分钟,询问 vps 供应商,说内存报警!然后好不容易进入命令重启 nginx, 再用 free 命令查询一下。的确是内存不够! 剩下 86M, 访问量大一点,内存就不够了。 以前用 php 写程序 512M 的服务器跑的飞快. 这到底怎么回事啊? 是 rails 耗内存,还是 ubuntu 的问题啊,就运行一个网站。日志我都切断的。今天先删除日志试试。大家有什么优化经验么?
先开 htop 看看,确定是 rails 占用了内存,然后再 profile(比如用 https://github.com/noahd1/oink
在这之前先不要下“rails 的确不是虚拟主机玩的”这种结论
#2 楼 @kungs #3 楼 @keating #5 楼 @reus
部署用 passenger+nginx, ubuntu 服务器系统 用 htop 命令检查了 代码检查了。这代码不是今天上线的,已经 1 年了。还是查到点问题,由于 faye 的服务器 thin 老死机,thin 没开启,不断访问 faye.js 请求不成功,但是这个请求不可能消耗这么多。 检查了 linux 进程,没多余的东西开启。 重新清理了 logs 下面的日志文件. 清理了 nginx 下面的日志文件 再重启 nginx, htop 看一下。free 的内存还有 150mb 左右。
还是挺耗的。我觉得四个原因. 1.与 rails 启动后加载框架,然后每次请求没有释放资源有关系。这是最耗的. 2.日志文件切割可以再小点,每次请求往 100Mb 的文件里面写数据肯定耗. 3.nginx 的 timeout 设置可以再大点,避免返回 502 代码 4.服务器供应商的 512mb 事实上不可能有这么多,可能他们按 1000 进制算,跟买移动硬盘老是少空间一样。
打算下次迁移到阿里云,用 1G 内存。在别的 vps 上加内存不方便。
这样看不出来的楼主,linux 系统不管运行什么都是这样,这是 linux 的内存机制就是这样,实际上你的剩余内存是 158MB
建议楼主 google 下linux free
以下内容摘自网络: 在 Linux 中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然。这是 Linux 内存管理的一个优秀特性,在这方 面,区别于 Windows 的内存管理。主要特点是,无论物理内存有多大,Linux 都将其充份利用,将一些程序调用过的硬盘数据读入内存,利用内存读写的高速特性来提高 Linux 系统的数据访问性能。而 Windows 是只在需要内存时,才为应用程序分配内存,并不能充分利用大容量的内存空间。换句话说,每增加一些物理内存,Linux 都将能充分利用起来,发挥了硬件投资带来的好处,而 Windows 只将其做为摆设,即使增加 8GB 甚至更大。
Linux 的这一特性,主要是利用空闲的物理内存,划分出一部份空间,做为 cache 和 buffers,以此提高数据访问性能。
页高速缓存 (cache) 是 Linux 内核实现的一种主要磁盘缓存。它主要用来减少对磁盘的 I/O 操作。具体地讲,是通过把磁盘中的数据缓存到物理内存中,把对磁盘的访问变为对物理 内存的访问。
磁盘高速缓存的价值在于两个方面:第一,访问磁盘的速度要远远低于访问内存的速度,因此,从内存访问数据比从磁盘访问速度更快。第二,数据一旦被访 问,就很有可能在短期内再次被访问到。
-/+ buffers/cache的意思相当于: -buffers/cache 的内存数:2461788 (等于第 1 行的 used - buffers - cached),实际上是应用程序所使用的内存。 +buffers/cache 的内存数:1576328 (等于第 1 行的 free + buffers + cached),是对应用程序来说还剩余的内存。
可见-buffers/cache 反映的是被程序实实在在吃掉的内存,而+buffers/cache 反映的是可以挪用的内存总数。 对操作系统来讲 buffers/cached 都是属于被使用,所以它认为 free 只有 27824. 对应用程序来讲是 (-/+ buffers/cach).buffers/cached 是等同可用的,因为 buffer/cached 是为了提高程序执行的性能,当程序使用内存时,buffer/cached 会很快地被使用。
linode 512 内存 centos 6.3+nginx+mysql+ruby 1.9.3+unicorn 方案,拖 redmine+gitlab+testing branch 完全无问题
一个 256M 内存的 xen VPS,跑了一个 mysql,一个 rails 应用 (单个 ruby 进程),一个 php 应用 (三个 php-cgi 进程),一个 nginx 工作进程,没听见 VPS 商发邮件说内存报警
你得先确认是不是你的 VPS 问题
写日志几乎没内存影响的...
最好检查一下报警的时候 nginx 的请求日志和对应的机器状态,说不定能找到代码中的问题
你是多线程还是多进程部署? Ruby 版本是 1.9.2 以下或者比较早的 1.9.3 的话,unicorn 在 GC 后反而会吃更多内存... 最好更新到最新的 1.9.3
另外还可以查查 mysql 的连接数
还有个可能是提供商在你的 vps 所在的机器跑了什么吃内存的程序...