测试环境服务器已经挂载了多个分区,可还是出现了磁盘空间不足的警告!那就来看看到底是哪些系统资源占用过大吧。
¶查看磁盘分布
执行cat /etc/issue
查看系统版本:
linux中常见的有Ext2、Ext3、Ext4、Linux swap、proc、sysfs、tmpfs等,通过mount
命名查看当前已挂载的文件系统:
通过lsblk
查看当前磁盘情况:
可以看到根目录挂载的内存空间只有20G,大部分空间集中在 /data0
和/data2
。咋们通df -lh
查看文件系统情况:
问题找到了,根目录几乎已经占满,但是更目录的内容可不好删除,玩意删错了,极有可能导致服务运行出现问题,甚至影响整个服务器的正常运转。
通过分析发现一下两点优化可以有效的减少内存占用:
- 迁移服务器日志文件
- go-path迁移
¶依赖库迁移
¶GOPATH
部门最近开始慢慢引入go作为开发语言,但是go Moules 问世之前 go的项目依赖管理并不像python 一样简单。
GOPATH目录下一共包含了三个子目录,分别是:
- bin:存储所编译生成的二进制文件。
- pkg:存储预编译的目标文件,以加快程序的后续编译速度。
- src:存储所有
.go
文件或源代码。在编写 Go 应用程序,程序包和库时,一般会以$GOPATH/src/github.com/foo/bar
的路径进行存放。
因此在使用 GOPATH 模式下,我们需要将应用代码存放在固定的$GOPATH/src
目录下,并且如果执行go get
来拉取外部依赖会自动下载并安装到$GOPATH
目录下。
在 GOPATH 的 $GOPATH/src
下进行 .go
文件或源代码的存储,我们可以称其为 GOPATH 的模式, GOPATH 模式下没有版本控制的概念
¶Go Modules
¶go mod
Go modules 命令:
命令 | 作用 |
---|---|
go mod init | 生成 go.mod 文件 |
go mod download | 下载 go.mod 文件中指明的所有依赖 |
go mod tidy | 整理现有的依赖 |
go mod graph | 查看现有的依赖结构 |
go mod edit | 编辑 go.mod 文件 |
go mod vendor | 导出项目所有的依赖到vendor目录 |
go mod verify | 校验一个模块是否被篡改过 |
go mod why | 查看为什么需要依赖某模块 |
¶GO111MODULE
Go语言提供了 GO111MODULE 这个环境变量来作为 Go modules 的开关,其允许设置以下参数:
- auto:只要项目包含了 go.mod 文件的话启用 Go modules,目前在 Go1.11 至 Go1.14 中仍然是默认值。
- on:启用 Go modules,推荐设置,将会是未来版本中的默认值。
- off:禁用 Go modules,不推荐设置。
¶迁移
GOPATH默认设置:$HOME/go
通过du -sh $HOME/go
查看磁盘占用情况: 1.5G
在 /data2目录下创建 go文件夹, 编辑 ~/.bash_profile
文件,添加环境变量 :
export GOPATH=/data2/go
保存退出你的编辑器.然后执行:
source ~/.bash_profile
用户并没有 /data2/
的访问权限,把 /data2/go
目录下的所有子文件的拥有者改为lhop用户:
chown -R lhop:lhop /data2/go
在项目里面使用 go mod 进行以来管理
¶为每一个项目添加运行环境
首先创建一个文件夹/file
, 在命令行执行 export GOPATH=/file
,当前项目中的包将会下载到/file
下。
注:命令行的export 只作用于当前窗口
参考: