如何把tomcat7永远放在网上?

时间:2015-09-14 20:44:35

标签: java linux tomcat7

我在数字海洋上安装了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.

有人知道怎么总是把它上线吗?

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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