Java web应用程序真的很慢
我使用Rackspace作为托管提供商,使用他们的云服务器托管,计划为256mb 我正在使用Geronimo2.2运行我的java应用程序 服务器启动没有问题,Geronimo加载速度相当快,但是,当我开始部署web应用程序时,它需要花费很长时间,一旦部署,在页面中导航就需要很长时间 我一直在监视服务器的活动,CPU不是很忙,但是,60%的内存已经用完了。这可能是问题所在吗 如果是,我有什么选择?我是否应该考虑将这个云服务器升级为更多RAM,或者更改主机提供商以更好地满足我的需求?Java web应用程序真的很慢,java,performance,hosting,rackspace-cloud,geronimo,Java,Performance,Hosting,Rackspace Cloud,Geronimo,我使用Rackspace作为托管提供商,使用他们的云服务器托管,计划为256mb 我正在使用Geronimo2.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%的等待时间,设备一直在写和读
更新:
升级我的主机到512MB,现在它是最新的速度!我应该注意的是,我忘记了Java的永久生成内存,Geronimo也使用它。结果证明,我确实需要更多的内存,更多的内存确实解决了我的问题。(如所料)YAY.
你应该考虑从LINUDE之类的东西运行一个虚拟专用Linux服务器。 您必须担心如何启动Java服务以及防火墙之类的东西,但一旦您做对了,实际上您就是自己的主机提供商,允许您做任何独立的实际Linux设备可以做的事情
至于内存,我不会升级,直到你有证据表明你没有足够的内存。60%的使用率低于100%的使用率 Java通常假定它可以接受分配给它的任何东西。也就是说,如果你给它一个最大200MB,它会变薄,即使它使用更少的内存,也可以使用200MB。通过使用-Xincgc增量垃圾收集器,有一种方法可以让Java使用更少的内存。实际上,当系统不再需要时,它会将大块内存返回给系统。这真的有点保守秘密。你不会看到有人指出这一点…根据我的经验,VPSE上的内存和CPU负载是非常相关的。这意味着,当应用程序服务器占用所有可用内存时,CPU使用率开始急剧下降,最终使应用程序无法访问 不过这只是一个副作用-你真的需要调查问题的根源强> 如果内存消耗非常高,则可能有多种原因:
正如您所看到的,这不是一项琐碎的任务,但您有可以帮助您解决问题的工具支持。我个人使用and。我猜你遇到了“交换” 正如您所知,Linux将一些内存交换到磁盘。这对于不经常访问的内存来说是非常好的 当Java开始吃堆和堆时,linux开始:
检查: 您可以使用
free-m
检查是否存在这种情况。。显示如何读取输出:
接下来,我将与“iostat 5”联系,查看交换分区上的磁盘IO速率。我会说,300或更高的写入速率意味着你几乎死在水里。我想说的是,您希望将交换分区的写入速率降低到每秒50个块以下,读取速率降低到每秒500个块以下。。如果可能的话,两者在大多数情况下都应为零。请记住,磁盘比RAM慢1000倍
您可以通过运行top
并点击shift+m
以按内存消耗顺序排列进程,来检查是否是Java吃掉了ram
如果你想。。您可以使用swapoff-a
禁用交换分区。。然后打开web控制台,点击一下站点。。您很快就会在控制台中看到错误消息,如“OOM Killed process xxx”(我认为OOM表示内存不足)。如果你看到linux试图通过杀死进程来满足内存请求。一旦发生这种情况,最好硬重启
固定: 如果是Java使用RAM。。也许会有帮助 我认为简单的解决办法就是升级云的大小