前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Cloud 微服务(外篇):一次部署故障

Spring Cloud 微服务(外篇):一次部署故障

原创
作者头像
安宁
修改2020-07-17 10:08:27
6280
修改2020-07-17 10:08:27
举报
文章被收录于专栏:Spring Cloud 微服务

本文介绍笔者遭遇的应用部署故障。

1. 故障描述

笔者有一台腾讯云服务器,配置如下:

服务器配置
服务器配置

Figure 1. 服务器配置

之前只运行 NGINX 和 FBG 棋盘游戏很稳定。接着使用 配置中心+注册中心+接口网关 取代了 NGINX,也没有出现问题。后来再加上 UAA 认证授权中心,就总是出问题。启动 UAA 之后,接口网关就挂了;再启动接口网关,UAA 就挂了,不知道什么原因。

2. 应用停止原因

首先,要找出为什么应用自己就挂了。查看系统日志:

代码语言:javascript
复制
# 在系统日志中搜索 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 启动的,没有设置过任何参数,看来需要进行参数调优了。

3. 内存规划

整理了一下,服务器需要运行的所有应用:

  1. 微服务项目包括 7 个应用
  2. FBG 棋盘游戏包括 2 个应用
  3. MYSQL 数据库包括 1 个应用

之前 MYSQL 是运行在 docker 上的,但 docker 太占内存,换用了物理机。

目前内存现状如下:

内存现状
内存现状

Figure 2. 内存现状

UAA 的 tomcat 已经启动了,但运行不正常;内部客户端、外部客户端还没有启动:

  1. 总内存:4 G
  2. 实际可用:3.7 G
  3. FBG:200 M
  4. MYSQL:400 M
  5. 剩余:3.1 G

每个微服务应用分配多少内存呢?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. 扩容重生

系统内存从 4 G 升到 8 G,刚启动时内存使用情况如下:

系统初始启动
系统初始启动

Figure 4. 系统初始启动

只有 MYSQL 350 M 比较多。启动所有应用后内存使用情况如下:

正常启动后内存使用情况
正常启动后内存使用情况

Figure 5. 正常启动后内存使用情况

5. 总结

最终通过扩容解决了问题,实际上并没有用到参数调优。可以看出自身硬件条件是核心,调优只能是锦上添花;硬件条件不行,再怎么调也不能起死回生。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 故障描述
  • 2. 应用停止原因
  • 3. 内存规划
  • 4. 扩容重生
  • 5. 总结
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档