文档中心 > 容器服务

EWS服务运行时常见问题

更新时间:2019/12/11 访问次数:6581

一、通用排查基础

1、服务名称与id,服务列表页面

 

2、容器id,容器管理页面

 

3、容器端口,主进程端口一般为port.mainprot或port.slbhttps的值

该例子中5000访问失败,所以健康检查标红了。

 

4、通用排查方法

1)webssh登录进容器,查看/acs/log下的应用日志。如果webssh登录不了,容器健康状态又为“运行中”,登录到ECS,执行docker exec -it 容器id /bin/bash

2)如果/acs/log下没有日志。登录ECS主机,执行docker logs 容器id,看容器启动的日志

例如,部署时提示 dial tcp 127.0.0.1:XXXX: getsockopt: connection refused,说明端口没有成功启动,按照上面两个步骤排查即可

 

 

二、Java应用常见问题

1、域名访问4XX

应用自身代码问题,需要自己排查。如400请求参数不合法、404找不到资源

 

2、域名访问5XX

1)容器管理中看健康状态

已停止: Docker容器可能没有起来。重新启动收集错误信息。(可以在EWS页面收集错误信息,也可以在宿主机执行docker logs 容器id 查看容器启动日志)

运行中: Docker容器已经起来,可以试着用WEBSSH登上去

2)WEBSSH登录,运行ps -elf | grep java

确认Java进程是否已经起来,出现如下代表java进程已经起来

-bash-4.2# ps -elf | grep java
0 S root 72 1 5 80 0 - 363512 futex_ 15:25 ? 00:00:21 /acs/user/jdk/jre//bin/java -Djava.util.logging.config.file=/acs/user/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -
Xms256M -Xmx256M -Xmn128M -Xss256K -XX:PermSize=64M -XX:MaxPermSize=64M -XX:SurvivorRatio=10 -Duser.timezone=Asia/Shanghai -Djava.endorsed.dirs=/acs/user/tomcat/endorsed -classpath /acs/user/tomcat/bin/bootstrap.jar:/acs/user/tomcat/bin/tomcat
-juli.jar -Dcatalina.base=/acs/user/tomcat -Dcatalina.home=/acs/user/tomcat -Djava.io.tmpdir=/acs/user/tomcat/temp org.apache.catalina.startup.Bootstrap start

3)看/acs/log下面的日志,如catalina.log,localhost.log等

常见的有java.lang.OutOfMemoryError这些,一般是开发者配置管理中堆大小,持久大小等设置不合适。

或者开发者代码的异常,如版本冲突,依赖冲突,数据库连接异常等。

4)宿主机ECS上,执行docker logs 容器id,可以看到该容器启动的过程日志,也可以帮助定位问题

5)Java应用推荐内存为2G及以上,可以尝试升级容器规格以及修改服务-配置管理中jvm的启动参数

6)检查部署的代码包,war包或jar是否正常

6.1)如果上传部署,看代码包是否能正常解压

6.2)检查解压代码包后的目录结构

 

3、SpringBoot上传部署/编译部署之后,健康检查失败,502

1)参照问题2中的排查方法

2)代码包目录结构结构问题,

正常的war包结构为META-INF,WEB-INF,org

正常的jar包结构为META-INF,BOOT-INF,org

参考:https://blog.csdn.net/chuan_zhang_ak/article/details/89511879

 

4、服务总是运行一段时间就没了,域名访问502或健康检查失败

一般来讲,这种情况都是因为java进程OOM被系统kill了,推荐java应用分配2G以上内存。

dmesg |grep java或egrep -i -r 'killed process' /var/log 等指令可以帮助找到相关日志。如下面的/var/log/messages中

解决方法:

1)升级容器规格,在服务列表-容器管理-规格升级

2)规格升级了,还要确认一下相应的jvm启动参数是否被调大。服务列表-配置管理

之后重置并重启容器。

 

5、Java服务启动很慢?

一般来说spring framework或springboot的应用启动,其他tomcat等应用依赖比较多的话启动会慢。

还有一个是SecureRandom的问题,如下所示,

 解决方法,在启动参数里加上,服务-配置配置管理

Tomcat7的官方镜像,加上jvm.append这个环境变量,值为-Djava.security.egd=file:/dev/./urandom

Tomcat8的官方镜像,直接再catalina.sh中加入-Djava.security.egd=file:/dev/./urandom

参考:https://wiki.apache.org/tomcat/HowTo/FasterStartUp

https://jingyan.baidu.com/article/4f34706e126f51e386b56d5f.html

 

6、升级容器规格没有效,java内存不足?

调整java应用规格:

1)升级容器规格,建议2G及以上

2)服务-配置管理,修改-Xms -Xmn等jvm启动参数

 

7、activemq镜像,无法监听消息?

openwire默认端口 61616,amqp默认端口 8161,可以在EWS服务-配置管理中修改相关配置。

EWS域名访问的是amqp端口,管理后台;

消息监听直接使用主机IP+容器端口(如61616)的形式。

无法监听请按照上面所述JAVA应用问题排查

 

8、需要修改容器中tomcat的配置文件,但是重启后会重置

1)tomcat8官方镜像支持server.xml和catalina.sh的配置,可以在服务-配置管理中修改。建议使用该镜像

2)webssh到容器中去修改tomcat配置,tomcat目录在/acs/user/tomcat,然后重启java进程。容器启动脚本为/acs/bin/start

参考文档:https://open.taobao.com/doc.htm?docId=117793&docType=1

3)使用自定义镜像

 

 

三、PHP应用常见问题

1、服务访问502 504

出现502,504错误的原因非常多,有可能是开发者的代码逻辑问题,也有可能是服务本身出现问题,排查方式步骤如下:

1)首先确认代码本身不存在问题

2)通过控制台webssh或者ssh客户端登录容器打开/acs/env/tengine/nginx.conf 文件,读取server 配置段的listsen 端口配置比如为5000(也可以在容器管理查看到容器对应的nginx端口,下图例子中也为5000)

3)在webssh(ssh客户端)执行curl 命令看是否返回ok。比如访问服务的页面的url是http(s)://xxx.xxx.com/aaa//xxx,在容器只执行"curl http://localhost:5000/aaa//xxx"

如果curl 命令返回结果正确,请联系工作台以及路由中心配置的小二进行排查。

4)如果上述curl命令返回也是和浏览器等客户端同样错误,请查看/acs/log/php.log以及/acs/log/php_fpm.log

5)查看nginx进程以及相应的端口(如此例中的5000)有没有启动,ps -elf | grep nginx,netstat -ntlp

6)ECS主机上执行docker logs 容器id,查看容器的启动日志,分析失败原因

7)确认主机上是否运行着"多余容器"。参考:

 

2、PHP服务不支持跨页面session传递?

如果使用的是EWS官方镜像,可以登录到容器中,看下/acs/user/script/tpl/php.ini文件,session.auto_start 是否为 0,

如果为0,则改为1,然后重启该容器

 

3、PHP脚本运行时间最大时间怎么调整?

对于使用官方镜像的,登录容器中,/acs/user/script/tpl/php-fpm.conf文件,修改 request_terminate_timeout的值,然后重启该重启。

注,如果使用了EWS接入层域名,接入层现在最长响应时间为60s,所以request_terminate_timeout不能大于60。

 

4、PHP官方镜像怎么添加扩展库?

EWS服务-配置管理,PHP_EXTENTSIONS字段,可选扩展如下:mqp, exif,imagick, memcache,memcached,mongo,redis,stomp,zookeeper。

其他扩展暂时不支持,如有需求,请使用自定义镜像:https://open.taobao.com/doc.htm?docId=104181&docType=1

 

四、NodeJS常见问题

1、启动服务后,统一接入层域名访问502,但是主机ip+端口的形式可以访问

1)检查容器端口,容器管理,查看容器的端口。看代码中server是否在该端口监听

2)检查代码,nodejs的server是否是https的,如果是,需要改成http的。统一接入层自身支持https,可以通过https://xxx.ewszjk.m.jaeapp.com进行访问

 

 

五、Nginx应用常见问题

1、修改nginx的配置,如access_log?两种方法

1)EWS服务-配置管理-nginx.conf.file,重置

2)登录到容器中,修改/acs/user/script/tpl/nginx.conf,然后重启容器

 

2、Nginx容器中获取客户端IP?X-Forwarded-For获取的不对?

原因:Nginx服务使用了EWS统一接入层(外网域名),EWS统一接入层底层基于Tengine,做了一层代理,再到用户的Nginx代理。所以X-Forwarded-For获取的的是统一接入层代理的IP

解决方案:使用proxy_add_x_forwarded_for,往上获取一层

参考:https://blog.csdn.net/qq_28796345/article/details/88685245

 

3、Nginx是否支持上传部署?

不支持

 

4、EWS上的应用,怎么去做loadbalance?怎么去集成nginx

可以使用EWS的统一接入层,接入层集群就是基于nginx做负载均衡的

 

5、Nginx缓存的怎么配置?

服务-配置管理-nginx.conf.file,自行配置  

 

六、dotnet常见问题

1、官方镜像dotnet:2.1.4 指的是支持 .NET Core 2.0 下的 SDK 2.1.4 还是说得是 .NET Core 2.1 下的Runtime 2.1.4?

SDK 2.1.4 ,无Runtime
 
 
2、使用官方镜像部署容器,访问异常,容器健康检查失败

1)登录ECS主机,执行docker logs 容器id,查看容器日志,若无日志报错,步骤2)

2)登录ECS主机,执行docker exec -it 容器id /bin/bash进入容器环境(页面webssh也可以)

3)/acs/code目录(服务的代码在这里),运行dotnet xx.dll,观察报错

4)如果报错相关的core Runtime not found。则需要在容器中自行安装相应版本的runtime。之后运行dotnet xx.dll 

注:如果是其他问题,暂时无法解决,dotnet不再提供技术支持。请使用自定义镜像或者不再使用EWS容器服务,自行搭建LINUX+NGINX的服务器
 

FAQ

关于此文档暂时还没有FAQ
返回
顶部