如果您想要远程诊断部署在Serverless应用引擎SAE(Serverless App Engine)上的应用,可以使用SAE远程调试功能。本文介绍如何通过跳板机使用OpenSSH实现远程调试。

前提条件

创建应用

背景信息

跳板机(Jump Server)是一台可以访问的服务器,您可以通过这台服务器去访问别的机器。对SAE而言,它的核心功能是打通本地和远程SAE应用实例的网络,通过SSH协议实现远程管理。SAE提供了命名空间级别的跳板机,在绑定相同的VPC后,您可一键登录到命名空间内的所有应用实例,实现本地与SAE应用实例间的互访、端云调试。

重要 远程调试仅用于临时调试,长时间开启远程调试可能存在数据泄露等风险,因此完成远程诊断后请及时删除跳板机,关闭远程调试功能。

步骤一:配置跳板机

  1. 登录SAE控制台
  2. 在左侧导航栏,单击命名空间,在顶部菜单栏选择地域,然后单击具体命名空间名称。
  3. 命名空间详情页面的基本信息页签内,确认VPC是否与目标SAE应用绑定的VPC一致。
    如果VPC不一致,您可以根据以下情况进行操作。
    • 已创建跳板机:单击删除跳板机后重建。
    • 未创建跳板机:单击切换VPC变更VPC。
  4. 单击基本信息页签内跳板机信息栏的添加跳板机
  5. 添加跳板机面板,配置相关信息。
    1. 设置跳板机创建信息页签,配置相关信息,单击下一步
      配置项 说明
      VPC VPC需与目标SAE应用绑定的VPC一致。
      vSwitch vSwitch数量至少需要配置1个,建议不超过3个。您可以单击更改,在选择vSwitch对话框内查看并更改为推荐可用区的vSwitch。
      安全组 请确保所选安全组中访问规则入方向存在自定义TCP 22端口(SSH端口)允许策略。
      SSH证书 您可以选择在文本框内手动输入,或单击选择文件上传。关于获取SSH的具体信息,请参见Generating a new SSH key and adding it to the ssh-agent.
    2. 创建跳板机资源页签,确认配置信息,单击确定
      系统会自动帮您在当前命名空间指定VPC和vSwitch下创建一个规格为0.5 Core 1 GiB的跳板机实例、一个弹性公网IP,按使用时长计费。具体信息,请参见SAE按量计费弹性公网IP按量计费
    创建成功后,您可以在基本信息页签内查看跳板机的具体网络配置,包括弹性公网IP地址、VPC、vSwitch和安全组。

步骤二:安装OpenSSH

您可以通过安装OpenSSH,借助远程调试的能力实现SSH远程登录以及SFTP、SCP上传下载文件的功能,进而方便您临时调试SAE的某个应用实例。更多信息,请参见一键复制安装命令

  1. 登录SAE控制台
  2. 在左侧导航栏,单击应用列表,在顶部菜单栏选择地域,然后单击具体应用名称。
  3. 基本信息页面,单击实例部署信息页签,在默认分组区域单击目标实例操作列的Webshell
  4. 单击Webshell窗口右上角的bt_copy_code图标。
  5. 一键复制安装命令对话框,选中安装OpenSSH复选框,预览命令后单击复制
  6. 在Webshell窗口执行以下命令,配置OpenSSH。
    1. 执行已复制的OpenSSH安装命令。
    2. 执行passwd命令,配置实例密码用于登录。

步骤三:远程调试

远程调试开启成功后,您可以通过获取的远程调试IP和端口,在可以访问公网且具有SSH客户端的主机中完成实例的远程调试。您可以参考以下场景,验证远程调试结果。

场景一:本地访问SAE应用实例

执行命令如下:
ssh root@{SAE应用实例IP} -J root@{跳板机IP}

场景二:将SAE应用实例指定端口映射到本地

执行命令如下:
ssh -L {本地调试端口}:{SAE应用实例IP}:{SAE应用实例端口} root@{跳板机IP} -N

场景三:Java远程调试

  1. 登录SAE控制台
  2. 在左侧导航栏,单击应用列表,在顶部菜单栏选择地域,然后单击具体应用名称。
  3. 基本信息页面右上角,单击部署应用
  4. 部署应用页面,展开启动命令设置区域,设置启动命令。设置完成后单击确认
    启动命令所需的参数,因创建Java应用时选择的应用部署方式不同而有所差异。
    重要 单击确认后,该应用将会被重启。为避免不可预知的错误,请在业务较少的时间段部署。
    • 镜像

      ENTRYPOINT: [nginx, '-g', 'daemon off;']为例,参数说明如下。

      配置项 说明
      启动命令 输入启动命令,例如nginx
      启动参数 输入启动参数,例如-g

      单击+添加,可以在新的参数行中增加输入参数daemon off

    • JAR包
      配置项 说明
      系统默认启动命令 SAE默认的启动命令。
      options设置

      配置JVM参数。关于参数详情,请参见JVM参数配置说明Tuning Java Virtual MachinesJVM Tuning: How to Prepare Your Environment for Performance Tuning

      如果您需要使用应用的远程调试功能,请配置以下命令:
      -agentlib:jdwp=transport=dt_socket,address=9000,server=y,suspend=n
      • transport:远程调试间的数据传输方式。
      • address:远程调试的地址。与开启远程调试时设置的调试端口保持一致,远程调试的详细说明,请参见远程调试
      重要 以WAR包、JAR包方式部署应用的启动命令不同,请勿共用启动命令。本示例中的远程调试命令,适用于以上两种部署方式。
      args设置 配置标准输出和错误输出的重定向命令,例如1>>/tmp/std.log>&1
      options快捷设置 只有Java环境Dragonwell时可以设置。
      • 开启微服务性能提升(Wisp 2协程):默认开启,开启后可以提升运行时多线程性能。
      • 开启应用内存优化(G1):默认开启,开启后可以针对多CPU与大容量内存场景,降低GC时间,适用于GC需要优化、大数据等场景。
      • 开启应用启动加速(Quickstart):只有Java环境Dragonwell 11时可以设置。选中开启应用启动加速(Quickstart)并设置持久化目录后,可以提升应用启动效率。
        重要 开启应用启动加速前,需要先设置NAS存储。具体操作,请参见设置NAS存储
      • 持久化目录:开启应用加速后需要设置,设置的持久化目录推荐为NAS存储的目录或者子目录,达到跨实例间的加速效果。关于如何设置NAS存储,请参见设置NAS存储
    • WAR包
      配置项 说明
      系统默认启动命令 SAE默认的启动命令。
      options设置

      配置JVM参数。关于参数详情,请参见JVM参数配置说明Tuning Java Virtual MachinesJVM Tuning: How to Prepare Your Environment for Performance Tuning

      如果您需要使用应用的远程调试功能,请配置以下命令:
      -agentlib:jdwp=transport=dt_socket,address=9000,server=y,suspend=n
      • transport:远程调试间的数据传输方式。
      • address:远程调试的地址。与开启远程调试时设置的调试端口保持一致,远程调试的详细说明,请参见远程调试
      重要 以WAR包、JAR包方式部署应用的启动命令不同,请勿共用启动命令。本示例中的远程调试命令,适用于以上两种部署方式。
      options快捷设置 只有Java环境Dragonwell时可以设置。
      • 开启微服务性能提升(Wisp 2协程):默认开启,开启后可以提升运行时多线程性能。
      • 开启应用内存优化(G1):默认开启,开启后可以针对多CPU与大容量内存场景,降低GC时间,适用于GC需要优化、大数据等场景。
      • 开启应用启动加速(Quickstart):只有Java环境Dragonwell 11时可以设置。选中开启应用启动加速(Quickstart)并设置持久化目录后,可以提升应用启动效率。
        重要 开启应用启动加速前,需要先设置NAS存储。具体操作,请参见设置NAS存储
      • 持久化目录:开启应用加速后需要设置,设置的持久化目录推荐为NAS存储的目录或者子目录,达到跨实例间的加速效果。关于如何设置NAS存储,请参见设置NAS存储
  5. 参考步骤一步骤二,开启指定SAE应用实例的调试功能。
  6. 执行以下命令,将SAE应用实例的指定端口映射到本地。
    ssh -L {本地调试端口}:{SAE应用实例IP}:{SAE应用实例端口} root@{跳板机IP} -N
  7. 本地连接127.0.0.1 {本地调试端口}进行调试。

场景四:PHP远程调试(Xdebug 3)

SAE支持PHP应用的远程调试。更多信息,请参见PHP远程调试Xdebug配置说明PHPStorm IDE远程调试配置说明

  1. 可选:如果应用使用框架,需要配置Nginx路由。
    # PhpStorm Validator
    location = /_intellij_phpdebug_validator.php {
      root /home/admin/app/php;
      fastcgi_pass 127.0.0.1:9000;
      include conf.d/fastcgi_params;
    }
  2. 登录SAE控制台
  3. 在左侧导航栏,单击应用列表,在顶部菜单栏选择地域,然后单击具体应用名称。
  4. 基本信息页面右上角,单击部署应用
  5. 部署应用页面,展开php.ini配置文件修改区域填写配置文件内容,并在php.ini挂载路径区域填写配置文件挂载的路径。
    [xdebug]
    zend_extension=xdebug
    xdebug.mode=debug
    xdebug.client_host=127.0.0.1
    xdebug.client_port=9003
    xdebug.discover_client_host=true
    * xdebug.client_port:SAE应用实例本地端口,与开启远程调试时设置的调试端口保持一致。
  6. 参考步骤一步骤二,开启指定SAE应用实例的调试功能。
  7. 执行以下命令,将SAE应用实例的指定端口映射到本地。
    ssh -L {本地调试端口}:{SAE应用实例IP}:{SAE应用实例端口} root@{跳板机IP} -N
  8. 本地连接127.0.0.1 {本地调试端口}进行调试。

更多信息

针对Java和PHP远程调试的更多操作信息,请参见以下文档:
如果您对Java远程调试端口配置了健康检查,调试时需要把IntelliJ IDEA的断点设置为Thread,否则会导致健康检查失败。更多信息,请参见设置健康检查db_set_suspend_thread_in_IDEA