嗨,你好!我是江恩,是一个新时代的移民工人在各种互联网工厂之间行走。对于在线业务,服务的稳定性和吞吐量通常是系统的重要指标。因此,本文将从以下4点扩展,以逐步解释如何优化Golang的性能。
在Golang服务中,我们经常从以下4分触发以优化服务:
Golang有两种类型的应用程序,工具和服务应用程序,工具类型应用程序的主要功能只是一段时间。我们本地运行单元测试的性能测试实际上是应用程序。服务类型应用程序是长期生存后端端应用程序,例如RPC服务,HTTP服务,我们的后端系统通常是面向服务的应用程序。
测试演示如下。这是一个快速行的示例。应用程序执行完成后,将生成文件以保存我们的CPU分析数据。获得采样数据后,使用GO Tool PPROF工具执行CPU性能分析。
此处使用的运行时/PPROF分析工具需要指定快照打印的位置,该打印是打印到标准输出的。它可以与程序中的打印冲突。我们可以自己实现文件。在这里,我们可以使用另一个开源工具来替换它,该工具将生成临时目录的日志快照文件。
如果您的应用程序正在运行(例如Web应用程序),则可以使用NET/HTTP/PPROF库,可以在提供HTTP服务时进行分析。在这种方式上,您的HTTP服务将更多/debug/pprof endpoint。当您访问它时,您将获得以下内容:
现在可以收集数据。如何获得快照?我们以前的操作在后台具有HTTP服务器服务。我们可以直接单击UI中的链接以获取内存快照。例如,单击配置文件,我们可以获得30s CPU快照..gz类型二进制文件可用于我们的以后分析。
无论它是工具类型应用程序还是面向服务的应用程序,我们使用相应的PPROF库获取数据后,我们都必须在下一步中分析这些数据。我们可以使用GO工具PPROF命令行工具。使用GO Tool pprof的最简单方法是:
在:
注意:获得的分析数据是动态的。要获得有效的数据,请确保应用程序处于较大的负载(例如在过程中运行的服务,或模拟访问对工具的访问)。。
您可以添加一些参数以获取更多信息,例如:
如何进行 +在线服务http接口地址:
执行上述代码将输入交互式接口,如下所示:
我们可以在交互式界面中输入以查看程序中CPU前3位数字的功能:
在:
在大多数情况下,我们可以分析这五列以获取应用程序的操作并优化程序。我们还可以使用命令查看特定功能分析,例如对我们编写的功能进行详细分析。
通过分析,发现大多数CPU资源都被17行占据。我们分析了Select语句中的默认值,而没有内容会导致上述执行。我们可以在默认分支上添加一排分支。
此快照文件的好处更直观。您可以通过图形界面进行分析:要查看图形界面,您需要安装GraphViz图形工具。MAC:BREW INLLACT graphviz Next,您可以使用GO Tool Tool pprof进行分析此数据
访问localhost:9999,您可以看到这样的页面:
当然,我们还可以选择视图,然后查看火焰图:
在这一点上,我们已经成功地获得了每个函数所占据的CPU时间,并且可以优化长占用功能(Pingdingshan)。
当我们将JSON数据存储到REDIS时,我们需要在取出时将其分析为结构,但是正式的Go for with Go的官方图书馆通常是瓶颈。(有关库的主要优化方法的详细信息,请参阅到:http://jsoniter.com/benchmark.html#optimization-user)。
有时我们需要在项目中使用深层复制场景。您可以参考本文。深拷贝性能比较:https://www.yuque.com/jinsesihuanian/gpwou5/xg20gn。
字符串的缝合是buffer first.buffer。由于字符串类型是一种不变的类型,因此缝线将创建一个新的字符串。在GO中进行的缝线在以下方式中很常见。具有高性能要求的销售使用字节。
使用STRCONV软件包替换FMT.sprintf的格式化方法。
现在选择了Golang,很自然地使用其简单而简单的同时使用机制。我们可以将某些不影响主过程的操作完全异步,例如发送电子邮件,编写日志等。您可以并行处理某些业务方案,例如您必须一次读取多个文件。
代码级别的优化是美国级别,业务存储的优化可以达到MS级别。因此,优化越近,应用程序层越好。对于代码级别,优化步骤是:
我将为您提供有关Golang服务的开发建议的文章。我们下次会看到它,和平吗?
我是江恩(Jianfan),他是一位新时代的移民工人,他启发了最简单的语言来描述最复杂的问题。请提高和关注。如果您对本文有任何疑问,请在我的微信公共帐户中留言。我还可以为您提供以下帮助:
微信公共帐户:“ Jian Fan”,