Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java web应用程序真的很慢_Java_Performance_Hosting_Rackspace Cloud_Geronimo - Fatal编程技术网

Java web应用程序真的很慢

Java web应用程序真的很慢,java,performance,hosting,rackspace-cloud,geronimo,Java,Performance,Hosting,Rackspace Cloud,Geronimo,我使用Rackspace作为托管提供商,使用他们的云服务器托管,计划为256mb 我正在使用Geronimo2.2运行我的java应用程序 服务器启动没有问题,Geronimo加载速度相当快,但是,当我开始部署web应用程序时,它需要花费很长时间,一旦部署,在页面中导航就需要很长时间 我一直在监视服务器的活动,CPU不是很忙,但是,60%的内存已经用完了。这可能是问题所在吗 如果是,我有什么选择?我是否应该考虑将这个云服务器升级为更多RAM,或者更改主机提供商以更好地满足我的需求? 编辑: 我

我使用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使用率开始急剧下降,最终使应用程序无法访问

不过这只是一个副作用-你真的需要调查问题的根源

如果内存消耗非常高,则可能有多种原因:

  • 这是正常的-可能您已经达到了一个程度,所有进程(应用程序服务器、其中的应用程序、后台进程、守护进程、操作系统等)都需要这么大的内存这是最不可能发生的情况
  • 内存泄漏-可能是由于框架或某些库中的错误(不太可能)或您自己的代码(可能)造成的可以监视并解决此问题
  • 大量请求-每个请求都需要CPU和内存来处理。您可以查看每秒请求与内存消耗之间的相关性,这意味着可以对其进行监视和解析
  • 如果您对CPU使用率感兴趣:

  • 同样,监视对应用程序的请求。对于不断计数的请求,不应发生任何异常情况
  • 一个组件正在耗尽大部分资源(可能您的数据库安装在同一台服务器上,并且由于查询效率低下而占用了所有的CPU资源?缓慢的日志记录会有所帮助。)

  • 正如您所看到的,这不是一项琐碎的任务,但您有可以帮助您解决问题的工具支持。我个人使用and。

    我猜你遇到了“交换”

    正如您所知,Linux将一些内存交换到磁盘。这对于不经常访问的内存来说是非常好的

    当Java开始吃堆和堆时,linux开始:

  • 将内存块A交换到磁盘,以腾出空间读取块B
  • 读/写块B
  • 将块B交换到磁盘以为其他块腾出空间
  • 由于磁盘速度比RAM慢1000倍,随着内存使用量的增加,您的机器越来越接近停止

    使用256 MB的云服务器,您可以获得512 MB的交换空间


    检查:

    您可以使用
    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。。也许会有帮助

    我认为简单的解决办法就是升级云的大小