- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在 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 内存的服务器,并且您正在运行 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 移动到不同的服务器。
关于java - 如何让tomcat7一直在线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32573597/
我是一名优秀的程序员,十分优秀!