带货|创新推出 | Serverless 场景排查问题利器:函数实例命令行操作( 二 )


string{\"/bin/bash\"execConn err := client.InstanceExec( fc.NewInstanceExecInput( serviceName functionName instanceID command ).WithStdin(true) .WithStdout(true) .WithStderr(true) .WithTTY(true) .WithIdleTimeout(120) .OnStdout( func(data [
byte) { fmt.Printf(\"STDOUT: %s\\" data)).OnStderr( func(data [
byte) { fmt.Printf(\"STDERR: %s\\" data)))if err != nil { fmt.Printf(\"%v\" err)if err := execConn.WriteStdin([
byte(\"ls\\r\")); err != nil { fmt.Println(\"Write Stdin error\" err) 适用场景 排查线上问题 在一些日常的场景下 , 实例命令行操作会带来更符合用户习惯、更高效便捷的排查问题方式 。用户小王是 Serverless 小白用户 , 写完一个程序部署到函数计算后 , 发现函数中设置的环境变量不生效 , 如果进一步排查 , 则需要修改代码 , 打印日志 , 重新部署 , 查看日志 , 使用这样繁琐的排查方式 。 现在借助实例命令行操作 , 小王可以直接命令:s exec {instance_id ENV , 便能一步定位问题 。实例命令行操作提供了便捷的登录体验 , 能帮助用户解决复杂场景下的应用问题 。 一些情况下 , 用户已经无法通过函数日志、监控指标来具体定位问题 , 需要借助比如 coredump 、tcpdump、jmap 等工具进行深入排查 。比如 , 用户小李发现自己的线上程序最近会出现一些函数错误 , 报错内容都是连接远程某服务超时 。 小李怀疑是函数实例与远端服务的网络链接不稳定 , 想进入实例内部 , 调查分析下实例与远端服务的网络情况 。 他可以按照这样的步骤进行: 登录进实例内部后 , 先安装 tcpdump 工具 , 需要执行 apt-get update 和 apt-get install tcpdump 两条命令: 安装完毕后 , 执行 tcpdump 命令 , 对远端服务 IP 的请求进行抓包 , 并将抓包结果保存在 tcpdump.cap 文件中: 抓包完毕 , 借助 OSS 命令行工具 ossutil64, 将 tcpdump.cap 文件上传到自己的 OSS, 然后下载到本地借助分析工具 wireshark 可以进行分析 。程序性能优化 很多时候 , 开发者需要通过各种 profiling 工具来分析性能、资源使用等问题 。 比如应用实例 CPU、内存等资源使用不符合预期;应用性能低于预期 , 通过 profiling 工具找到瓶颈等等 。 通过实例命令行操作 , 开发者能够方便的运行语言、框架提供的各种 profiling 工具 , 优化程序性能和资源使用 。以运行在函数计算上的高德自主出行为例 , 其峰值 TPS 会达到数十万级别 , 作为实时在线应用 , 服务能接受的请求延迟在几十毫秒级别 。 考虑到成本压力 , 在上线前他们期望压测出单实例最高能承受的 TPS 和对应的调用延迟 , 以此评估需要的实例数量 。但是高德在压测中发现单实例的平均/长尾延时不符合预期 , 当单实例 TPS 达到 300 TPS 的时候 , 请求延迟会直线上升 。 他们想确定 , 是否是自己的应用程序哪里存在性能瓶颈 , 或者是函数计算运行时的性能存在问题?借助实例命令行操作 , 他们可以登录进实例内部 , 通过 profiling 深入分析后发现了性能问题 , 最后优化了程序性能达到了上线标准 。下面以 custom runtime 为例:demo 示例程序使用 golang 编写并部署到函数计算上: 登录进入实例后 , 下载 golang 安装包 : 并解压安装 go : 执行 go tool pprof 命令 , 并产生分析文件:/root/pprof/pprof.bootstrap.samples.cpu.001.pb.gz ,最后借助 OSS 命令行工具 ossutil64 ,运行 ./ossutil64 cp 命令 , 将分析文件上传到自己的 OSS Bukcet 中, 便可以下载到用户本地进行可视化分析 。总结 实例命令行功能的推出希望能消除用户使用 Serverless 的“最后一公里” , 直接将真实的函数运行环境展现给用户 , 此后 Serverless 将不再是一个“黑盒” , 用户可以更加信任和依赖 Serverless 平台来扩展更多的业务场景和规模 。作者简介:丛霄 , 阿里云函数计算研发工程师 , 专注于云原生 Serverless、分布式系统稳定性等领域 。原文链接:https://developer.aliyun.com/article/858354?utm_content=g_1000322651 本文为阿里云原创内容 , 未经允许不得转载 。