联犀 联犀
首页
使用指南
开发指南
技术分享
  • 中台接口 (opens new window)
  • 物联网接口 (opens new window)
在线体验 (opens new window)
  • gitee (opens new window)
  • github (opens new window)
  • 边缘网关-RHILEX (opens new window)
  • 边缘网关-opengw (opens new window)
首页
使用指南
开发指南
技术分享
  • 中台接口 (opens new window)
  • 物联网接口 (opens new window)
在线体验 (opens new window)
  • gitee (opens new window)
  • github (opens new window)
  • 边缘网关-RHILEX (opens new window)
  • 边缘网关-opengw (opens new window)
  • 后端

    • 联犀是如何架构好一个既要又要的系统
    • 插槽设计及使用
    • 如何实现微服务通用websocket
    • 多租户实现
    • tdengine结合物联网平台落地
    • 全链路追踪
    • 缩小可执行文件的大小
      • 生成功能授权
    • 技术分享
    • 后端
    godLei6
    2024-08-29
    目录

    缩小可执行文件的大小

    在生产环境中,特别是一些环境受限的环境,对二进制文件的大小会更加敏感,二进制越大,占用的内存空间也就越大,在微服务领域对此更加敏感,一个服务多占用100m内存,10个服务就是1个g了.
    联犀在探索结合gozero如何减少二进制文件的大小,有以下几个方案

    # 二进制分析

    首先我们来看下不添加任何处理的二进制文件大小(注: 需要在linux环境下操作)

    1. 打开things,进入 things/service/apisvr
    2. 执行编译 go build
    3. 打开 https://gsa.zxilly.dev/ (opens new window) 将二进制文件拖进重点的上传框
    4. 可以看到下图的分析, 总大小 121.55MB,左侧的debug信息中有14.44MB

    # 优化

    # 添加通用编译条件

    go build的时候添加 -ldflags="-s -w"
    如: go build -ldflags "-s -w"

    • -s: 去掉符号信息.
    • -w: 去掉DWARF调试信息.

    通过以上方式可以减少大约一半的大小,编译后总大小为84.35MB

    # 删减引入k8s

    gozero是一个微服务框架,默认支持k8s,但是这也带来一个问题,当我们不需要k8s的时候k8s引入的包就会过于庞大,可以看到下图, k8s占用了总共约18MB的空间

    解决方式: 通过和gozero的作者的沟通, 可以通过编译条件的方式来减少依赖的引入,解决方式如下

    go build的时候添加 -tags no_k8s 如: go build -ldflags "-s -w" -tags no_k8s

    我们编译了之后再看看文件的大小,从一开始的121.55MB 变成了 59.45MB

    参考: https://github.com/zeromicro/go-zero/pull/4323 (opens new window)

    # 分包

    在golang中,如果一个包被引入了一个文件,那么所有文件都会打进这个二进制中,那么我们其实可以将大包拆分为不同的小包,这样就能做到按需引入,如联犀的share中,将不同的客户端拆分成多个包,当没有使用的服务就不会引入了

    上次更新: 2024/10/11, 17:14:01
    全链路追踪
    生成功能授权

    ← 全链路追踪 生成功能授权→

    Theme by Vdoing | Copyright © 2022-2025 昆明云物通科技有限公司|GNU | 滇ICP备2024043132号-1 |
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式