我使用Rackspace作为托管服务提供商,使用他们的云服务器托管,使用256mb计划。
我正在使用Geronimo 2.2来运行我的java应用程序。
服务器启动没问题,加载Geronimo的速度非常快,但是,当我开始部署我的Web应用程序时,它会花费很长时间,一旦部署完毕,就需要永远浏览页面。
我一直在监视服务器活动,CPU不是那么忙,但是,60%的内存正在用完。这可能是问题吗?
如果是这样,我的选择是什么?我是否应该考虑将此云服务器升级到具有更多RAM的内容,或者更改主机提供商以更好地满足我的需求?
<小时/>
编辑: 我应该注意,即使我没有部署我的应用程序,只是加载了Geronimo,有时我会在尝试关闭Geronimo时获得连接时间。
此外,数据库与应用程序位于同一服务器上。 (但我不会说它的查询密集)
<小时/>
更新:
在@matiu建议之后,我尝试运行free -m,这是我得到的输出:
total used free shared buffers cached
Mem: 239 232 6 0 0 2
-/+ buffers/cache: 229 9
Swap: 509 403 106
这与运行 ps ux 完全不同,这就是我之前的60%。
我做了iostat检查,大约25%的爱情时间,设备不断写作和阅读。
<小时/> 的更新
答案 0 :(得分:1)
我猜你正在遇到'交换'。
正如您所知,Linux将一些内存交换到磁盘。这对于无法访问的内存非常有用。
当Java开始吃堆和堆时,linux启动:
由于磁盘比RAM慢1000倍,随着内存使用量的增加,您的机器研磨越来越接近停止。
使用256 MB云服务器,您可以获得512 MB的交换空间。
<强>检查:强>
您可以检查free -m
是否属于这种情况。this page显示如何阅读输出:
接下来我将检查'iostat 5'以查看交换分区上的磁盘IO速率。我会说300或更高的写入率意味着你几乎死在水中。我想你要保持交换分区的写入速率低于每秒50个块,并且读取速率低于每秒500个块...如果可能的话,大多数时候都应该为零。记住磁盘比RAM慢1000倍。
您可以通过运行top
并按shift+m
按内存消耗顺序来检查是否是Java吃了ram。
如果你想...你可以用swapoff -a
禁用交换分区..然后打开网络控制台,然后点击网站...你很快就会在控制台中看到错误消息,如'OOM杀死进程xxx'(我认为OOM用于内存不足)。如果你看到那些linux试图通过杀死进程来满足内存请求。一旦发生这种情况,最好硬重启。
<强>定影强>
如果是使用RAM的Java .. this link可能有帮助。
我认为简单的解决方法就是升级云服务器的大小。
您可能会发现不同的Java RTE可能更好。
如果您在a 32 bit chroot中运行它,则可能会占用更少的内存。
答案 1 :(得分:0)
您应该考虑运行虚拟专用Linux服务器,例如linode。 您必须担心如何启动Java服务以及防火墙等等,但是一旦您做对了,您实际上是自己的托管服务提供商,允许您执行独立的实际Linux机箱可以执行的操作
至于记忆,在你有证据表明你没有足够的证据之前我不会升级。 60%用完了不到100%用完......
Java通常假定它可以接受分配给它的任何内容。这意味着,如果你给它最多200MB,它就可以拿200MB,即使它使用的更少。 通过使用-Xincgc增量垃圾收集器,有一种方法可以使Java使用更少的内存。它实际上最终会在不再需要时将大块内存返回给系统。这真的有点保密。你不会看到有人指出这一点......
答案 2 :(得分:0)
根据我的经验,VPS上的内存和CPU负载非常相关。这意味着,当应用程序服务器占用所有可用内存时,CPU使用率开始飙升,最终导致应用程序无法访问。
这只是一个副作用 - 你真的需要调查问题的来源!
如果内存消耗非常高,那么可能有多种原因:
如果您对CPU使用感兴趣:
正如您所看到的,这不是一项微不足道的任务,但您可以获得可以帮助您的工具支持。我个人使用java melody和probe。