【发布时间】: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 消息。