【问题标题】:How to put tomcat7 always online?如何让tomcat7始终在线?
【发布时间】:2015-09-14 20:44:34
【问题描述】:

我在 Digital Ocean 上有 512MB RAM 的 Ubuntu 14.04 云服务器,并安装了 tomcat7 以接受我的 Java 应用程序,还有一个 wordpress 站点在上面运行,几乎没有访问权限。因此,我创建了一个需要始终在线的 REST Web 服务,因为 Android 应用程序可以访问。问题是当我有一段时间不使用 WS 时,它会出现故障,我必须再次手动启动 tomcat。

当我询问 tomcat 的状态时,我得到以下答案:

Tomcat Servlet 引擎未运行,但 pid 文件存在。

这是正常状态下服务器的内存日志:

         total       used       free     shared    buffers     cached
Mem:       490        480          9         64          6        119
-/+ buffers/cache:    354        135
Swap:        0          0          0

顶部命令:

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
 8835 www-data  20   0  363904  65472  37244 S 16.6 13.0   0:31.02 php5-fpm
12625 www-data  20   0  361052  63896  35704 S  8.3 12.7   0:13.30 php5-fpm
24655 mysql     20   0  891176  56332   1576 S  1.7 11.2  72:04.31 mysqld
11509 www-data  20   0  361696  65796  37168 S  1.3 13.1   0:16.99 php5-fpm
    7 root      20   0       0      0      0 S  0.3  0.0   4:31.17 rcu_sched
   28 root      20   0       0      0      0 S  0.3  0.0   0:44.41 kswapd0
  123 root      20   0       0      0      0 S  0.3  0.0   3:26.29 jbd2/vda1-8
  744 www-data  20   0   91112   2400    540 S  0.3  0.5   0:53.93 nginx
13305 tomcat7   20   0 1126588 144516   5792 S  0.3 28.8   0:44.17 java
14557 root      20   0   24820   1508   1100 R  0.3  0.3   0:00.07 top
    1 root      20   0   33504   1504    120 S  0.0  0.3   1:59.18 init
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.29 kthreadd
    3 root      20   0       0      0      0 S  0.0  0.0   0:03.83 ksoftirqd/0
    5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H
    8 root      20   0       0      0      0 R  0.0  0.0   4:37.10 rcuos/0
    9 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh
   10 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcuob/0

在 tomcat 进程中使用 jmap -heap 我有以下详细信息:

using thread-local object allocation.
Concurrent Mark-Sweep GC

Heap Configuration:
   MinHeapFreeRatio = 40
   MaxHeapFreeRatio = 70
   MaxHeapSize      = 134217728 (128.0MB)
   NewSize          = 1310720 (1.25MB)
   MaxNewSize       = 44695552 (42.625MB)
   OldSize          = 5439488 (5.1875MB)
   NewRatio         = 2
   SurvivorRatio    = 8
   PermSize         = 21757952 (20.75MB)
   MaxPermSize      = 174063616 (166.0MB)
   G1HeapRegionSize = 0 (0.0MB)

Heap Usage:
New Generation (Eden + 1 Survivor Space):
   capacity = 2424832 (2.3125MB)
   used     = 280872 (0.26786041259765625MB)
   free     = 2143960 (2.0446395874023438MB)
   11.583152977195946% used
Eden Space:
   capacity = 2162688 (2.0625MB)
   used     = 242168 (0.23094940185546875MB)
   free     = 1920520 (1.8315505981445312MB)
   11.197546756628787% used
From Space:
   capacity = 262144 (0.25MB)
   used     = 38704 (0.0369110107421875MB)
   free     = 223440 (0.2130889892578125MB)
   14.764404296875% used
To Space:
   capacity = 262144 (0.25MB)
   used     = 0 (0.0MB)
   free     = 262144 (0.25MB)
   0.0% used
concurrent mark-sweep generation:
   capacity = 34521088 (32.921875MB)
   used     = 26207256 (24.993186950683594MB)
   free     = 8313832 (7.928688049316406MB)
   75.91665708798054% used
Perm Generation:
   capacity = 50319360 (47.98828125MB)
   used     = 43680848 (41.65730285644531MB)
   free     = 6638512 (6.3309783935546875MB)
   86.8072407916158% used

16661 interned Strings occupying 2074936 bytes.

有人知道如何始终将其放在网上吗?

【问题讨论】:

  • Tomcat 没有这样的超时。您的 Tomcat JVM 很有可能崩溃,尤其是根据您提供的消息。查看 Tomcat 日志,了解 JVM 可能崩溃的原因。
  • 你为 JVM 分配了多少内存?
  • 你在服务器上设置了交换空间吗?如果您使用 PHP for Wordpress 和 Tomcat 运行 Apache,这听起来可能是个问题。你也在上面运行数据库吗?当您执行top 时,您的内存使用量是多少?
  • 哦,只有 9MB 可用空间?运行“top”,并按 mem 排序。使用情况来查看哪些进程使用了​​多少内存。在 tomcat 仍在运行时,还可以使用 tomcat 进程的进程 id 运行“jmap -heap”,以查看更多详细信息。
  • Tomcat 可能被内存不足的杀手杀死 - 扫描 /var/log/syslog 文件以获取 OOM 消息。

标签: java linux tomcat7


【解决方案1】:

好的,如果您有一个 512 MB RAM 的服务器,并且您正在运行 MySQL 和 PHP5,那么 JVM 可能会因 OutOfMemory 异常而崩溃。

在 jmap 输出中,唯一重要的数字是并发标记扫描生成的可用内存,其中只有 7.9 MB 可用内存,这对于 Web 服务来说听起来非常小。

在崩溃之前,JVM 还会花费大量时间尝试进行垃圾收集,这可能导致进程变得无响应,甚至在它完全崩溃之前。

您可以添加 1GB 的交换空间(IIRC,Linux 管理员建议交换空间 = 2 x 内存)。 参见例如http://www.prowebdev.us/2012/05/amazon-ec2-linux-micro-swap-space.html 适用于 AWS,可能也适用于 Digital Ocean。

MySQL 和 PHP5 进程可能会换出大量未使用的分配内存。如果这会使您的应用程序速度过慢,您可能需要更多的 RAM,或者将 PHP 和 MySQL 移动到不同的服务器上。

【讨论】:

  • 我以前不能说,但现在我可以了!它就像一个魅力。问题是关于内存的,所以我添加了一个交换空间(临时)谢谢大家!
猜你喜欢
  • 2022-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多