如何让tomcat7一直在线?

How to put tomcat7 always online?

我在 Digital Ocean 上有 Ubuntu 14.04 云服务器和 512MB RAM,并安装了 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.

有谁知道怎么一直放在网上吗?

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

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

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

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

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