Azure App Service行为异常:SSH无法连接且日志流显示异常
问题背景
我在Azure App Service计划下运行两个应用已逾一年,运行状态良好:一个生产实例、一个开发实例,均通过Azure DevOps基于对应main/develop分支提交构建Docker容器。今早给开发实例启用memcached替代数据库存储会话(同时在线用户约12人,超时时间5分钟)后出现异常:
- 日志流仅显示Kudu控制器相关信息
- Web SSH无法连接
- 但应用本身仍100%可用
已完成排查:
- 确认sshd_conf配置符合微软要求,未修改要求的root密码
- 未改动的生产实例仍正常运行且SSH可正常连接
- 对比两个实例的Dockerfile与entry-point.sh,仅开发实例曾添加安装和启动memcached的代码行,移除这些代码后问题依旧,怀疑Kudu出现故障
排查与解决步骤
强制重启Kudu服务
直接在Azure门户进入开发实例的「高级工具」(Kudu)页面,点击顶部的「重启」按钮。如果无法通过门户打开Kudu,可通过Azure CLI发送重启请求:az webapp restart --name <你的应用名> --resource-group <你的资源组名> --slot <开发实例槽名(如果用了部署槽)>或者向Kudu端点发送POST请求(需Azure账户认证):
POST https://<你的应用名>.scm.azurewebsites.net/api/restart检查资源占用情况
进入Azure门户的「监控」面板,查看开发实例的CPU、内存使用率,确认Kudu的scm进程是否被memcached或其他进程抢占资源。如果生产实例正常,可对比两者的资源占用曲线。重置Kudu配置
在开发实例的「配置」>「应用设置」中,添加临时环境变量WEBSITE_RESET_KUDU=1,保存后等待应用重启,再删除该变量。此操作会重置Kudu的核心配置,解决因配置文件异常导致的问题。排查端口冲突
确认Docker镜像中没有端口映射冲突:- 检查Dockerfile的
EXPOSE指令,确保未占用Kudu SSH默认的2222端口 - 查看entry-point.sh,确认没有修改SSH端口或关闭Kudu相关进程的操作
- 检查Dockerfile的
提取Kudu后台日志
如果日志流无法查看详细信息,可通过Azure CLI下载Kudu的SCM日志:az webapp log download --name <你的应用名> --resource-group <你的资源组名> --log-type scm解压后查看
scm目录下的日志文件,定位Kudu进程的异常原因。重新部署干净镜像
若以上步骤均无效,尝试将生产实例的Docker镜像重新部署到开发实例,排除镜像层面的隐藏问题(比如构建过程中引入的依赖冲突)。
内容的提问来源于stack exchange,提问作者Tim D.

