本文介绍笔者遭遇的应用部署故障。
笔者有一台腾讯云服务器,配置如下:
Figure 1. 服务器配置
之前只运行 NGINX 和 FBG 棋盘游戏很稳定。接着使用 配置中心+注册中心+接口网关 取代了 NGINX,也没有出现问题。后来再加上 UAA 认证授权中心,就总是出问题。启动 UAA 之后,接口网关就挂了;再启动接口网关,UAA 就挂了,不知道什么原因。
首先,要找出为什么应用自己就挂了。查看系统日志:
# 在系统日志中搜索 java
$ tail -1000f /var/log/messages | grep "java"
Jul 16 10:04:29 mail kernel: [10475] 0 10475 941362 92429 299 0 0 java
Jul 16 10:04:29 mail kernel: [11077] 0 11077 945175 100985 316 0 0 java
Jul 16 10:04:29 mail kernel: [ 1131] 0 1131 628383 116266 349 0 0 java
Jul 16 10:04:29 mail kernel: [ 3830] 0 3830 956927 126642 388 0 0 java
Jul 16 10:04:29 mail kernel: [26110] 0 26110 956477 100776 310 0 0 java
Jul 16 10:04:29 mail kernel: [27645] 0 27645 952862 104587 316 0 0 java
Jul 16 10:04:29 mail kernel: [28638] 0 28638 917484 32346 147 0 0 java
Jul 16 10:04:29 mail kernel: [28640] 0 28640 682651 8576 95 0 0 java
Jul 16 10:04:29 mail kernel: Out of memory: Kill process 3830 (java) score 127 or sacrifice child
Jul 16 10:04:29 mail kernel: Killed process 3830 (java), UID 0, total-vm:3827708kB, anon-rss:506568kB, file-rss:0kB, shmem-rss:0kB
可以看出:应用使用内存过多,导致服务器总内存不足,所以被系统干掉了。之前应用都是通过 java -jar xx.jar
启动的,没有设置过任何参数,看来需要进行参数调优了。
整理了一下,服务器需要运行的所有应用:
之前 MYSQL 是运行在 docker 上的,但 docker 太占内存,换用了物理机。
目前内存现状如下:
Figure 2. 内存现状
UAA 的 tomcat 已经启动了,但运行不正常;内部客户端、外部客户端还没有启动:
每个微服务应用分配多少内存呢?3.1 / 7 约等于 0.44 G,先设置 256 M 试试。使用带参数的命令 nohup java -Xmx256m -Xms256m -Xmn96m -Xss256k -jar app.jar &
启动应用:
Figure 3. 带参数启动
虽然限制了最大内存为 256 M,但实际运行都在 350 M 左右(原因参考 内存超过Xmx)。启动最后一个应用【外部客户端】后,UAA 很不幸地被干掉了,还是内存太小了,只能扩容。
系统内存从 4 G 升到 8 G,刚启动时内存使用情况如下:
Figure 4. 系统初始启动
只有 MYSQL 350 M 比较多。启动所有应用后内存使用情况如下:
Figure 5. 正常启动后内存使用情况
最终通过扩容解决了问题,实际上并没有用到参数调优。可以看出自身硬件条件是核心,调优只能是锦上添花;硬件条件不行,再怎么调也不能起死回生。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。