在Go二进制文件中查找最大的导入包
当我使用在Go二进制文件中查找最大的导入包,go,dependencies,Go,Dependencies,当我使用go-tool检查二进制文件时,我的项目有一个巨大的二进制文件(23MB,通常只有11MB),但它显示每个包名,而不是项目上直接导入的每个包: 23 075 950 (23 MB) go tool nm -sort size -size ApiServerQ | head -n 20 fb12c0 4874612 r runtime.pclntab a741e0 669338 T github.com/aws/aws-sdk-go/aws/endpoints.in
go-tool
检查二进制文件时,我的项目有一个巨大的二进制文件(23MB,通常只有11MB),但它显示每个包名,而不是项目上直接导入的每个包:
23 075 950 (23 MB)
go tool nm -sort size -size ApiServerQ | head -n 20
fb12c0 4874612 r runtime.pclntab
a741e0 669338 T github.com/aws/aws-sdk-go/aws/endpoints.init
87a200 305452 T github.com/xdg/stringprep.init
14d0c80 75600 D runtime.mheap_
14c0ba0 65744 D runtime.trace
fa0b60 38267 r runtime.findfunctab
149c6a0 30720 D crypto/ed25519/internal/edwards25519.base
62cd20 20993 T vendor/golang.org/x/crypto/chacha20poly1305.chacha20Poly1305Seal
faae40 20892 r runtime.typelink
4a4680 20413 T unicode.init
1497be0 19108 D vendor/golang.org/x/text/unicode/norm.decomps
1493120 19105 D golang.org/x/text/unicode/norm.decomps
628480 18589 T vendor/golang.org/x/crypto/chacha20poly1305.chacha20Poly1305Open
148f1a0 16256 D vendor/golang.org/x/net/idna.idnaValues
5c9080 16152 T crypto/sha512.blockAMD64
14bcce0 16064 D runtime.semtable
14e6c80 15384 D github.com/klauspost/compress/zstd.fsePredef
148b5a0 15360 D vendor/golang.org/x/text/unicode/bidi.bidiValues
485520 15154 T time.parse
859d20 14875 T go.mongodb.org/mongo-driver/x/mongo/driver/operation.(*IsMaster).Result
与我以前的一个项目(锡拉开发银行)相比:
和其他旧版本(MemSQL+GORM):
另一个(PostgreSQL):
另一个(PostgreSQL):
问题是,哪个包裹导致了这种膨胀?因为如果没有外部CI/CD(即使在upx和ldflags-s-w之后),将二进制文件上载到服务器需要时间,或者哪个项目的直接导入会间接导入那个巨大的包
已经尝试了gofat
,但它没有显示正确的包名(它显示了模糊的包名),也尝试了goweight
,但它显示了exit status 1
,无需担心,解决了问题,显然我以前在错误的目录下运行了goweight
。我还发现,监工/取数工
(检查人)导入的redis.v7
和aws sdk go
是罪魁祸首
goweight . | head -n 20
8.7 MB github.com/go-redis/redis/v7
7.3 MB github.com/aws/aws-sdk-go/service/s3
3.9 MB net/http
3.8 MB runtime
3.3 MB github.com/gocql/gocql
2.8 MB github.com/aws/aws-sdk-go/aws/endpoints
2.5 MB github.com/valyala/fasthttp
1.9 MB go.mongodb.org/mongo-driver/mongo
1.8 MB net
1.8 MB crypto/tls
1.5 MB go.mongodb.org/mongo-driver/x/mongo/driver/operation
1.5 MB golang.org/x/sys/unix
1.4 MB reflect
1.2 MB github.com/xdg/stringprep
1.2 MB go.mongodb.org/mongo-driver/bson/bsoncodec
1.2 MB go.mongodb.org/mongo-driver/x/mongo/driver
1.1 MB go.mongodb.org/mongo-driver/bson/bsonrw
1.0 MB github.com/klauspost/compress/zstd
998 kB math/big
916 kB go.mongodb.org/mongo-driver/x/mongo/driver/topology
更新在降级到并更新到删除aws sdk的监管者,同时删除gocqlx后,它将减少到18MB(如果使用ldflags-s-w,则为13MB;如果使用upx,则为4MB)
由于包导入的子依赖性,很难找到根本原因。包X和Y可能显示“膨胀”,但它们都可能取决于包Z,而包Z才是真正的膨胀。您可以使用
副作用导入作为本文的提纲,对导入大小进行一些实证测试,以更好地了解热点。在符号表中显示20个条目不太可能显示一个大“东西”。完全有可能依赖关系树更大,并且添加了很多小东西。
15 438 537 (15 MB)
go tool nm -sort size -size MonolithI | head -n 20
b24500 3556591 r runtime.pclntab
ee3960 65744 D runtime.trace
ebbf60 30720 D crypto/ed25519/internal/edwards25519.base
b182e0 26236 r runtime.findfunctab
652aa0 20993 T vendor/golang.org/x/crypto/chacha20poly1305.chacha20Poly1305Seal
46f7b0 20065 T unicode.init
eb74a0 19105 D vendor/golang.org/x/text/unicode/norm.decomps
64e200 18589 T vendor/golang.org/x/crypto/chacha20poly1305.chacha20Poly1305Open
b1f6a0 16520 r runtime.typelink
eb3520 16256 D vendor/golang.org/x/net/idna.idnaValues
5f8a00 16152 T crypto/sha512.blockAMD64
edfaa0 16064 D runtime.semtable
eafaa0 14976 D vendor/golang.org/x/text/unicode/bidi.bidiValues
5a3300 14482 T crypto/sha256.block
5ffc90 14174 T encoding/asn1.parseField
4ba780 13913 T time.parse
8857e0 13733 T net/http.init
7dd940 13729 T github.com/go-sql-driver/mysql.parseDSNParams
7b21a0 12577 T github.com/kokizzu/gorm.(*Scope).buildCondition
768030 12202 T database/sql.convertAssignRows
12 007 258 (12 MB)
go tool nm -sort size -size MonolithYOD | head -n 20
9914a0 2696675 r runtime.pclntab
c6d0c0 65744 D runtime.trace
4667d0 22868 T unicode.init.ializers
604f00 20993 T internal/x/crypto/chacha20poly1305.chacha20Poly1305Seal
987a40 19967 r runtime.findfunctab
c4c340 19105 D internal/x/text/unicode/norm.decomps
74bb00 19020 T github.com/tdewolff/minify/css.init.ializers
600660 18589 T internal/x/crypto/chacha20poly1305.chacha20Poly1305Open
c483c0 16256 D internal/x/net/idna.idnaValues
7a4de0 16186 T github.com/nfnt/resize.Resize
5bc930 16152 T crypto/sha512.blockAMD64
c69200 16064 D runtime.semtable
7a8d20 14984 T github.com/nfnt/resize.resizeNearest
5c4000 14964 T encoding/asn1.parseField
c44ac0 14592 D internal/x/text/unicode/bidi.bidiValues
55abc0 14482 T crypto/sha256.block
6f7e10 13890 T net/http.init.ializers
7bbb40 13555 T image/png.(*decoder).readImagePass
98d680 12544 r runtime.typelink
4d9bb0 12353 T encoding/json.(*decodeState).literalStore
14 127 727 (14 MB)
go tool nm -sort size -size MonolithL | head -n 20
a94080 2899496 r runtime.pclntab
e095e0 75600 D runtime.mheap_
df9500 65744 D runtime.trace
73a9c0 35788 T github.com/tdewolff/minify/css.(*cssMinifier).minifyProperty
d8e380 30720 D crypto/ed25519/internal/edwards25519.base
845d10 26470 T github.com/golang/freetype/truetype.(*hinter).run
744510 25126 T github.com/tdewolff/minify/css.init
a895c0 23278 r runtime.findfunctab
60a110 20993 T vendor/golang.org/x/crypto/chacha20poly1305.chacha20Poly1305Seal
472ff0 20413 T unicode.init
d898c0 19108 D vendor/golang.org/x/text/unicode/norm.decomps
605870 18589 T vendor/golang.org/x/crypto/chacha20poly1305.chacha20Poly1305Open
d85940 16256 D vendor/golang.org/x/net/idna.idnaValues
5ba1e0 16152 T crypto/sha512.blockAMD64
df5640 16064 D runtime.semtable
7cb220 16012 T github.com/nfnt/resize.Resize
d81d40 15360 D vendor/golang.org/x/text/unicode/bidi.bidiValues
4879e0 15154 T time.parse
7cf0b0 14806 T github.com/nfnt/resize.resizeNearest
56b880 14482 T crypto/sha256.block
goweight . | head -n 20
8.7 MB github.com/go-redis/redis/v7
7.3 MB github.com/aws/aws-sdk-go/service/s3
3.9 MB net/http
3.8 MB runtime
3.3 MB github.com/gocql/gocql
2.8 MB github.com/aws/aws-sdk-go/aws/endpoints
2.5 MB github.com/valyala/fasthttp
1.9 MB go.mongodb.org/mongo-driver/mongo
1.8 MB net
1.8 MB crypto/tls
1.5 MB go.mongodb.org/mongo-driver/x/mongo/driver/operation
1.5 MB golang.org/x/sys/unix
1.4 MB reflect
1.2 MB github.com/xdg/stringprep
1.2 MB go.mongodb.org/mongo-driver/bson/bsoncodec
1.2 MB go.mongodb.org/mongo-driver/x/mongo/driver
1.1 MB go.mongodb.org/mongo-driver/bson/bsonrw
1.0 MB github.com/klauspost/compress/zstd
998 kB math/big
916 kB go.mongodb.org/mongo-driver/x/mongo/driver/topology
depth . | less
│ ├ github.com/jpillora/overseer/fetcher
│ │ ├ compress/gzip
│ │ ├ encoding/json
...
│ │ ├ net/http
│ │ ├ os
│ │ ├ github.com/aws/aws-sdk-go/aws
goweight . | head -n 20
3.9 MB net/http
3.8 MB runtime
3.0 MB gopkg.in/redis.v5
2.5 MB github.com/valyala/fasthttp
1.9 MB go.mongodb.org/mongo-driver/mongo
1.8 MB net
1.8 MB crypto/tls
1.5 MB go.mongodb.org/mongo-driver/x/mongo/driver/operation
1.5 MB golang.org/x/sys/unix
1.4 MB reflect
1.2 MB github.com/xdg/stringprep
1.2 MB go.mongodb.org/mongo-driver/bson/bsoncodec
1.2 MB go.mongodb.org/mongo-driver/x/mongo/driver
1.1 MB go.mongodb.org/mongo-driver/bson/bsonrw
1.0 MB github.com/klauspost/compress/zstd
998 kB math/big
916 kB go.mongodb.org/mongo-driver/x/mongo/driver/topology
847 kB syscall
828 kB go.mongodb.org/mongo-driver/x/bsonx
802 kB gopkg.in/mgo.v2/internal/json