0%

记一次问题解决过程

测试环境服务器已经挂载了多个分区,可还是出现了磁盘空间不足的警告!那就来看看到底是哪些系统资源占用过大吧。

查看磁盘分布

执行cat /etc/issue查看系统版本:

image-20210922154202452

linux中常见的有Ext2、Ext3、Ext4、Linux swap、proc、sysfs、tmpfs等,通过mount命名查看当前已挂载的文件系统:

image-20210922154347845

通过lsblk查看当前磁盘情况:

image-20210922154628696

可以看到根目录挂载的内存空间只有20G,大部分空间集中在 /data0/data2。咋们通df -lh 查看文件系统情况:

image-20210922155615572

问题找到了,根目录几乎已经占满,但是更目录的内容可不好删除,玩意删错了,极有可能导致服务运行出现问题,甚至影响整个服务器的正常运转。

通过分析发现一下两点优化可以有效的减少内存占用:

- 迁移服务器日志文件
- 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 只作用于当前窗口

参考:

https://segmentfault.com/a/1190000017213655

https://segmentfault.com/a/1190000021854441