go

记一次TCP全队列溢出问题排查过程

女生的网名这么多〃 提交于 2021-01-13 18:54:33
1. 前言 本文排查的问题是经典的TCP队列溢出问题,因TCP队列问题在操作系统层面没有明显的指标异常,容易被忽略,故把排查过程分享给大家。 2. 问题描述 A服务调用B服务接口超时,B服务主机IOWAIT高,具体超时情况分为两种: A服务的请求在B服务日志中可查到,但B服务的响应时间超过了A服务的等待超时时间3S。 A服务的请求在B服务日志中无法查到。 3. 问题分析 此种超时请求集中在很短的一段时间(通常在2分钟之内),过后便恢复正常,所以很难抓到问题现场分析原因,只能搭建测试环境,A服务持续请求B服务,在B服务主机上通过DD命令写入大量数据造成主机IOWAIT高,同时通过TCPDUMP在两端抓包分析。 部分服务超时日志: 服务A:Get http://xxx&id=593930: net/http: request canceled (Client.Timeout exceeded while awaiting headers) 服务B: "GET xxx&id=593930 HTTP/1.1" 200 64 "-" "Go-http-client/1.1" "-" "-" 165000(单位微秒) 服务A发起请求3S后没有收到服务B响应,断开连接,服务B日志显示处理时长为0.165S,远低于3S,服务A侧看服务B的响应时间为网络传输时间

进阶 K8s 高级玩家必备 | Kubebuilder:让编写 CRD 变得更简单

做~自己de王妃 提交于 2021-01-13 15:18:11
阿里云服务器活动,以及搭建博客教程,请点击: 5分钟搭建个博客玩玩 关注公众号,回复【docker】【k8s】【电子书】【ppt】,有更多资料供你学习! 导读: 自定义资源 CRD(Custom Resource Definition)可以扩展 Kubernetes API,掌握 CRD 是成为 Kubernetes 高级玩家的必备技能,本文将介绍 CRD 和 Controller 的概念,并对 CRD 编写框架 Kubebuilder 进行深入分析,让您真正理解并能快速开发 CRD。 控制器模式与声明式 API 在正式介绍 Kubebuidler 之前,我们需要先了解下 K8s 底层实现大量使用的控制器模式,以及让用户大呼过瘾的声明式 API,这是介绍 CRDs 和 Kubebuidler 的基础。 控制器模式 K8s 作为一个“容器编排”平台,其核心的功能是编排,Pod 作为 K8s 调度的最小单位,具备很多属性和字段,K8s 的编排正是通过一个个控制器根据被控制对象的属性和字段来实现。 下面我们看一个例子: apiVersion: apps/v1 kind: Deployment metadata: name: test spec: selector: matchLabels: app: test replicas: 2 template: metadata: labels:

ocjp考试题之三

こ雲淡風輕ζ 提交于 2021-01-13 14:51:10
Given: 11. public class Test { 12. public static void main(String [] args) { 13. int x = 5; 14. boolean b1 = true; 15. boolean b2 = false; 16. 17. if ((x == 4) && !b2 ) 18. System.out.print("1 "); 19. System.out.print("2 "); 20. if ((b2 = true) && b1 ) 21. System.out.print("3 "); 22. } 23. } What is the result? A. 2 B. 3 C. 1 2 D. 2 3 E. 1 2 3 F. Compilation fails. G. An exception is thrown at runtime. 如果if后面没有语句块,就是紧跟的一句语句受if影响 &与&&的区别,&&有短路功能当第一个语句是false时将不判断第二个语句,&符号两边不是boolean值时,执行位运算。 注意第20行代码处是b2=true,只有一个等号;是赋值操作!!!! QUESTION 47 Given: 11. static void test() throws Error { 12. if (true)

CRD(Custom Resource Definition)开发脚手架kubebuilder介绍

谁说胖子不能爱 提交于 2021-01-13 12:38:16
简介: kubernetes从1.7之后支持CRD的方式定义资源,达到拓展k8s功能的目的。目前开发CRD有两种方式,一种是通过code-generator 自定义资源代码生成器 的方式,一种是通过kubebuilder和operator-sdk等脚手架的方式。下面介绍一下通过kubebuilder完成CRD开发 1 安装kubebuilder 1.1 依赖环境 go version v1.13+. docker version 17.03+. kubectl version v1.11.3+. kustomize v3.1.0+ Access to a Kubernetes v1.11.3+ cluster. 1.2 安装go 本文环境没有安装go语音,所有先下载go安装包 wget https://dl.google.com/go/go1.14.4.linux-amd64.tar.gz 解压到/user/local目录 tar -C /usr/local -xzf go1.14.4.linux-amd64.tar.gz 添加环境变量, vim /etc/profile 添加如下内容: export GOPATH=/root/go export GOROOT=/usr/local/go export PATH=$PATH:/usr/local/go/bin export PATH

go-zero api 接口参数的验证

不羁岁月 提交于 2021-01-13 09:56:51
默认是必填的,所有参数必填。 那么是否可以选填。是的。开发者说可以。 在那里控制 api/internal/types/types.go 这个文件 在标签里写上 optional 就可以为选填了。 日期:2021-1-12 来源: oschina 链接: https://my.oschina.net/u/4406751/blog/4893664

zabbix api python使用

和自甴很熟 提交于 2021-01-13 08:44:28
API使用 zabbix官网文档: https://www.zabbix.com/documentation/2.2/manual/api , Zabbix API是基于JSON-RPC 2.0规格,具体实现可以选择任何自己爱好的编程语言,可以采用Perl、Ruby、PHP之类的。 本文已python为例。python zabbix api模块较多,使用较为方便。 下面是各个语言zabbix模块及github连接,可共参考。 数据流程 下面的流程图代表了Zabbix API 工作的典型工作流。验证(方法user.login)是获取验证ID的强制步骤。这个ID又允许我们调用API提供的任何权限允许的方法来进行操作。在之前的例子中没有提到user.logout方法,这也是一次验证ID能够重复使用的原因所在。使用user.logout方法后将会使验证ID失效,后面的操作将不能再使用此ID。 Python py-zabbix by Alexey Dubkov - Zabbix Modules for Python (PyPI py-zabbix , no python3) ZabbixPythonApi by Frank Yao - Zabbix API for Python (no python3) zabbix by gescheit - a Python library (PyPI

Golang 根据Gorm和Gin开发一个后台管理系统

回眸只為那壹抹淺笑 提交于 2021-01-13 08:24:33
\\\\\\\\\\\ English | 简体中文 Project Guidelines Web UI Framework:element-ui Server Framework:gin Grom Framework: gorm 1. Basic Introduction 1.1 Project structure │ ├─conf (Config file) │ ├─docs (swagger APIs docs) │ ├─log (log file) │ ├─public (public static file) │ ├─static (head icon) ├─src │ ├─controller (Controller) │ ├─middleware (Middleware) │ ├─models (Model entity) │ ├─pkg (Project private package) │ ├─adapter (Casbin adapter) │ ├─app (Gin service response) │ ├─codes (Response code) │ ├─error (Project private error) │ ├─gredis (Redis) │ ├─query (Songo parase to SQL line) │ ├─setting

Golang 根据Gorm和Gin开发一个后台管理系统

眉间皱痕 提交于 2021-01-13 07:50:42
\\\\\\\\\\\ 项目后端地址: https://github .com/olongfen/gorm-gin-admin 项目前端地址: https://github.com/olongfen/user_admin 项目指导文档 Web UI Framework:element-ui Server Framework:gin Grom Framework: gorm 1. 基本介绍 1.1 项目结构 │ ├─conf (Config file) │ ├─docs (swagger APIs docs) │ ├─log (log file) │ ├─public (public static file) │ ├─static (head icon) ├─src │ ├─controller (Controller) │ ├─middleware (Middleware) │ ├─models (Model entity) │ ├─pkg (Project private package) │ ├─adapter (Casbin adapter) │ ├─app (Gin service response) │ ├─codes (Response code) │ ├─error (Project private error) │ ├─gredis (Redis) │ ├

kubeadm修改证书过期时间

☆樱花仙子☆ 提交于 2021-01-13 07:27:47
因为我是安装用kubeadm自动安装的,目前最新版本1.63 但是限于证书过期时间问题,需要去做更改,特此记录! 一、安装go语言。 现在新版本的k8s重新编译都需要高版本的go语言了。我这边安装的是V1.13.5 先下载:rm -rf go1.135.linux-amd64.tar.gz tar -zxvf go1.135.linux-amd64.tar.gz mv go /usr/local/ 添加环境变量: export PATH=$PATH:/usr/local/go/bin source /etc/profile 查看go语言版本 go verison warning: GOPATH set to GOROOT (/usr/local/go) has no effect go version go1.13.5 linux/amd64 一定要确定go语言有环境变量 不然后面编译会报错。 二、下载源码 git clone https://github.com/kubernetes/kubernetes.git 或者 浏览器打开 https://github.com/kubernetes/kubernetes 后下载zip压缩包 我是用的浏览器下载的,得到一个kubernetes-master.zip 解压后:得到文件夹 kubernetes-master 三、开始修改 cd

c#多线程

点点圈 提交于 2021-01-13 06:25:22
概述与概念 C#支持通过多线程并行地执行代码,一个线程有它独立的执行路径,能够与其它的线程同时地运行。一个C#程序开始于一个单线程,这个单线程是被CLR和操作系统(也称为“主线程”)自动创建的,并具有多线程创建额外的线程。这里的一个简单的例子及其输出: 除非被指定,否则所有的例子都假定以下命名空间被引用了: using System; using System.Threading; class ThreadTest { static void Main() { Thread t = new Thread (WriteY); t.Start(); // 在新的线程中运行WriteY while (true) Console.Write ("x"); // 不停地写'x' } static void WriteY() { while (true) Console.Write ("y"); // 不停地写'y' } } xxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyy yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxxxxxxxxxxxxxxxxxxxxxx