2017-03-28 15:24:34    262    0    0

原文地址:http://www.cprogramming.com/debugging/valgrind.html

 

对windows使用者来说,如果你没有对linux机器的访问权限,或者你想开发windows程序,那么你可能对IBM的Purity软件更有兴趣,Purity在检测内存问题方面与valgrind功能类似,你可以自己去下载它。

获取Valgrind

如果你正在运行linux,而没有安装valgrind,那么你可以从Valgrind download page下载。

安装很简单,只需要解压就可以了。(XYZ在下面的例子中是版本号的意思)

 

bzip2 -d valgrind-XYZ.tar.bz2
tar -xf valgrind-XYZ.tar

上面的操作会创建一个目录,名字为valgrind-XYZ,切换到这个目录,运行下面的命令

 

 

./configure
make
make install

现在你已经安装了valgrind,让我们看下怎么使用它

 


使用Valgrind查找内存泄漏

内存泄漏是最难检测的bug之一,因为直到你用完了内存而有一个malloc失败,它不会表现出任何外在的问题。实际上,当我们使用C/C++这类没有垃圾回收机制的语言来工作的时候,几乎一半的时间会花费在正确处理free内存的问题上。如果你的程序运行足够长的时间并且运行到了那个代码分支,即使一个错误也是代价巨大的。


当你用valgrind运行你的代码的时候,你需要指定使用valgrind的什么工具;简单地运行一下valgrind你就会得到当前的列表。在这篇文章中,我们主要使用memcheck工具,memcheck工具可以保证我们正确的内存使用。不加其他参数,valgrind会打印出调用call和malloc的一个概括信息(注意18490是我系统上的process id;在不同的运行时,它是不同的)

 

% valgrind --tool=memcheck program_name
...
=18515== malloc/free: in use at exit: 0 bytes in 0 blocks.
==18515== malloc/free: 1 allocs, 1 frees, 10 bytes allocated.
==18515== For a detailed leak analysis,  
2020-03-03 17:47:57    448    0    0

K8S

简介

介绍

  1. K8S是为生产、开发环境设计的容器关系系统。如果把所有的计算节点+存储服务+网络 当做一个集群,K8S就是

提供了一个对集群内资源统一管理的平台。

概念介绍

  1. 在开始了解K8S之前,需要对K8S系统中的几个概念有一个初步的了解

Node

  1. Node就是一个实际的计算节点,他可能是一台云主机、虚拟机,或者是一台实体机

Container

  1. 容器就是应用进程运行的环境,和Docker中的容器是相同的概念

Pod

  1. 容器组,顾明思议就是一个或者是多个功能具有关联性的容器的组合+存储资源。
  2. 他是对容器的一层封装,K8S通过这种方式为处在一个Pod中的容器提供统一的服务,比如网络,CPU,内存,
  3. 在一个pod中的容器之间,上述的资源都是共享的。
  4. pod也是K8S实际调度的最小单位,他不是一个实体,是一个抽象的概念。

Service

  1. service也是一个抽象的概念,他是对一组pod的抽象,并提供对处在他下面的一组pod做流量的负载、分发。
  2. 在创建Service的时候,通过设置配置文件中的 spec.type 字段的值,可以以不同方式向外部暴露应用程序:
  3. ClusterIP(默认)
  4. 在群集中的内部IP上公布服务,这种方式的 Service(服务)只在集群内部可以访问到
  5. NodePort
  6. 使用 NAT 在集群中每个的同一端口上公布服务。这种方式下,可以通过访问集群中任意节点+端口号的方式访问服务 <NodeIP>:<NodePort>。此时 ClusterIP 的访问方式仍然可用。
  7. LoadBalancer
  8. 在云环境中(需要云供应商可以支持)创建一个集群外部的负载均衡器,并为使用该负载均衡器的 IP 地址作为服务的访问地址。此时 ClusterIP NodePort 的访问方式仍然可用。

Namespace

  1. 命名空间,用来区分因为功能划分、服务类型、团队、项目不同,
2020-03-03 17:47:54    335    0    0

说明

client-go 是K8S提供的用于对K8S进行二次开发的接口 golang版本
GitHub地址 https://github.com/kubernetes/client-go

使用说明

  • 直接的使用可以参考官网中的实例,这里只对几个关键的点进行说明

代码展示

  1. var kubeconfig *string //k8s配置文件路径,这个根据实际的情况进行配置即可
  2. // use the current context in kubeconfig
  3. config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig) //创建一个config对象
  4. if err != nil {
  5. panic(err.Error())
  6. }
  7. // create the clientset
  8. clientset, err := kubernetes.NewForConfig(config) //创建一个clientset
  9. if err != nil {
  10. panic(err.Error())
  11. }
  12. //service接口 获取所有的service
  13. service,err:= clientset.CoreV1().Services("default").List(metav1.ListOptions{
  14. LabelSelector:"app=mongodb",
  15. FieldSelector:"metadata.resourceVersion=666572",
  16. })
  17. if err != nil{
  18. fmt.Printf("获取serverice 失败\n",err.Error())
  19. panic(err.Error())
  20. }
  21. fmt.Printf("获取到的service长度[%d]\n", len(service.Items))
  22. for index:=0; index < len(service.