Java Web 应用程序真的很慢

标签 java performance hosting rackspace-cloud geronimo

我使用 Rackspace 作为托管提供商,使用他们的云服务器托管,计划为 256mb。

我正在使用 Geronimo 2.2 来运行我的 java 应用程序。

服务器启动没有问题,加载 Geronimo 速度相当快,但是,当我开始部署 Web 应用程序时,它花了很长时间,而且一旦部署完毕,就需要很长时间才能浏览页面。

我一直在监视服务器 Activity ,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% 的 iowait 时间,并且设备不断地写入和读取。

<小时/> 更新:
将我的主机升级到 512MB,现在已经达到速度了!我应该注意的是,我忘记了 Java 的永久代内存,Geronimo 也使用它。事实证明,我确实需要更多的内存,而更多的内存确实解决了我的问题。 (如预期)是的。

最佳答案

我猜你遇到了“交换”。

正如您所知,Linux 将一些内存交换到磁盘。这对于访问次数不多的内存来说非常有用。

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

  1. 将内存块 A 交换到磁盘,以便为 block B 中的读取腾出空间
  2. 读/写 block B
  3. 将 block B 交换到磁盘,为其他 block 腾出空间。

由于磁盘比 RAM 慢 1000 倍,随着内存使用量的增加,您的机器越来越接近停止。

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

<小时/>

检查:

您可以使用free -m检查是否属于这种情况.. this page显示如何读取输出:

接下来我将使用“iostat 5”检查交换分区上的磁盘 IO 速率是多少。我想说,写入速率为 300 或更高意味着您几乎已经死在水里了。我想说你希望将交换分区的写入速率保持在每秒 50 个 block 以下,读取速率保持在每秒 500 个 block 以下。如果可能的话,大多数情况下两者都应该为零。请记住,磁盘比 RAM 慢 1000 倍。

您可以通过运行 top 并按 shift+m​​ 按内存消耗对进程进行排序来检查是否是 Java 占用了内存。

如果您愿意..您可以使用swapoff -a禁用交换分区..然后打开Web控制台,并点击一下该站点..您很快就会在以下位置看到错误消息控制台就像“OOM Killed process xxx”(我认为 OOM 是指“内存不足”)。如果您看到 Linux 试图通过终止进程来满足内存请求。一旦发生这种情况,最好硬重启。

<小时/>

修复:

如果是使用 RAM 的 Java .. this link可能有帮助。

我认为简单的解决方法就是升级云服务器的大小。

您可能会发现不同的 Java RTE 可能会更好。

如果你在 a 32 bit chroot 中运行它它可能使用更少的内存。

关于Java Web 应用程序真的很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8738824/

相关文章:

java - 如何读取数字并将数字放入对象数组中

java - 当发生young GC时,ext root扫描需要很长时间。可能的原因是什么?

c# - list.Count > 0 和 list.Count != 0 之间的区别

java - 如何在 vps 服务器上发布 java webapp,我试过它不起作用

sql-server - 如果我无权访问所有数据库,SSMS 2008 中的对象浏览器将不起作用

java - 使用 Active Directory SSO 从 Microsoft IE 到 Java 服务器时,为什么会收到 GSSException?

java - 在java中检索与列值相对应的单行

java - 自动执行 jprofiler 分析并保存快照

php - 为什么我对 PHP 脚本/WP REST API 的并发 AJAX 请求如此慢?

continuous-integration - 用于持续集成的 VPS/VDS (TeamCity)