腾讯mini项目-【指标监控服务重构】2023-07-21

今日已办

当在Docker容器中运行程序时,可能会遇到使用os.Getpid()函数时出现异常的情况。这是因为Docker容器中的进程隔离机制与宿主机器不同,容器内部的进程可能无法访问宿主机器的进程信息。

要解决这个问题,可以尝试:

使用docker run命令启动容器时,添加--pid=host选项,将容器与宿主机器共享进程命名空间。这样,容器内部的进程就可以访问宿主机器的进程信息。

需要注意的是,使用这种方法可能会破坏容器的隔离性,可能导致容器内部的进程与宿主机器的进程产生冲突。此外,该选项需要在启动容器时指定,无法在程序运行时动态设置。

sh 复制代码
docker run --pid=host <image-name>
go 复制代码
// createMemoryPercentObserver
// @Description  createMemoryPercentObserver
// @Author xzx 2023-07-21 16:24:51
// @Param err
// @Param periodicMeter
func createMemoryPercentObserver(err error, periodicMeter metric.Meter) {
   _, err = periodicMeter.Float64ObservableGauge(
      "profile/memory_percent",
      metric.WithFloat64Callback(func(ctx context.Context, observer metric.Float64Observer) error {
         p, err2 := process.NewProcess(int32(os.Getpid()))
         if err2 != nil {
            return err2
         }
         memoryPercent, err2 := p.MemoryPercent()
         if err2 != nil {
            return err2
         }
         memoryPercent *= 100.0
         log.Logger.Info(fmt.Sprintf("profile memory percentage: %f%%", memoryPercent))
         observer.Observe(float64(memoryPercent))
         return nil
      }),
      metric.WithDescription("the memory percentage of profile server"),
   )
}

// createCpuPercentObserver
// @Description  createCpuPercentObserver
// @Author xzx 2023-07-21 16:19:59
// @Param err
// @Param periodicMeter
// @Return error
func createCpuPercentObserver(err error, periodicMeter metric.Meter) error {
   _, err = periodicMeter.Float64ObservableGauge(
      "profile/cpu_percent",
      metric.WithFloat64Callback(func(ctx context.Context, observer metric.Float64Observer) error {
         p, err2 := process.NewProcess(int32(os.Getpid()))
         if err2 != nil {
            return err2
         }
         cpuPercent, err2 := p.CPUPercent()
         if err2 != nil {
            return err2
         }
         cpuPercent *= 100.0
         log.Logger.Info(fmt.Sprintf("profile cpu percentage: %f%%", cpuPercent))
         observer.Observe(cpuPercent)
         return nil
      }),
      metric.WithDescription("the cpu percentage of profile server"),
   )
   return err
}

明日待办

相关推荐
有味道的男人25 分钟前
不止数据对接:跨境电商 API 如何重构用户体验、降低合规成本并提升复购
重构·ux
honder试试3 小时前
Centos7从0-1安装部署Clickhouse验证与Mysql实时同步
数据库·mysql·clickhouse
Tezign_space3 小时前
AI重构营销:3K营销体系的技术实现路径与系统架构
人工智能·重构·系统架构·内容运营·kol·kos·koc
yiersansiwu123d3 小时前
AI赋能医疗:从效率革命到价值重构
人工智能·重构
快乐非自愿3 小时前
AI重构低代码开发:从“可视化编码”到“自然语言编程”(技术解析+实战案例)
人工智能·低代码·重构
踏浪无痕4 小时前
高并发写入 API 设计:借鉴 NSQ 的内存队列与背压机制
后端·面试·go
老蒋新思维4 小时前
创客匠人 2025 万人峰会深度:AI+IP 信任三角重构知识变现 —— 从单次成交到终身绑定的生态逻辑
大数据·网络·人工智能·tcp/ip·重构·创始人ip·创客匠人
老蒋新思维4 小时前
创客匠人峰会总结:私域 AI 化引爆知识变现 —— 创始人 IP 的智能增长新范式
网络·人工智能·网络协议·tcp/ip·重构·创始人ip·创客匠人
技术不打烊5 小时前
Go并发陷阱避坑:RWMutex与Channel最佳实践
网络协议·go
soft20015256 小时前
ClickHouse 常见面试题
clickhouse