如何让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 移动到不同的服务器。
我在 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 移动到不同的服务器。