自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(66)
  • 资源 (4)
  • 问答 (1)
  • 收藏
  • 关注

原创 XFS write死锁, IO线程Hang (bug 记录)

本文主要是记录下线上遇到的一个令人头疼的XFS bug起因线上发现一部分NFSD进程会偶发性D住并且无法恢复,查看其堆栈发现如下:xfs在执行do_writepages的时候死锁了结果内核团队帮忙查了下这个问题,发现的确有人向Linux kernel 提过,并且Linux kernel已经有patch修复了...

2021-09-15 10:11:48 694

原创 pthread_rwlock_t成员含义

记录一下以防忘记glibc-2.23/sysdeps/x86/bits/pthreadtypes.htypedef union{ struct { int __lock; unsigned int __nr_readers; unsigned int __readers_wakeup; unsigned int __writer_wakeup; unsigned int __nr_readers_queued; unsigned int __nr

2021-09-06 17:23:04 888

原创 如何分析一段代码的性能:内存占用,cpu占用和执行时间

分别从以下两个方面来介绍一些工具的使用, Java、C/C++、golang都有涉及。1. CPU占用和执行时间Linux C/C++ 下有两个工具。一个是perf,最终可以搞出个火焰图,看CPU占用还是比较直观的。如下图另外一个Google出的gperftools,这玩意也是贼好用。但是就是有代码侵入,可以搞出个调用链图,图上能显示每个函数调用占用CPU时间,及比例。非常好用。如下图golang的话官方工具:pporf, 效果跟上面的gperftools差不多 , 而且这玩意不光显示CPU,

2021-07-13 14:24:30 2830

原创 Memcached LRU淘汰策略,以及数据丢失问题

0x01 问题说明:有两个服务,一个服务A会先通过get操作到memcached中拿图片c,如果返回为空会去对象存储系统中拿图片c然后缓存在memcached中,超时时间设置为一周,然后返回mc_key信息,另外一个服务B会拿这个mc_key信息去memcached中获取保存的图片。这个是个异步的过程。然后线上出现一个诡异的问题,A服务已经在memcached中get到了这个图片(日志中打印:...

2019-11-28 22:08:36 982 1

翻译 grpc HTTP2使用

简介本文档详细描述grpc是如何借助HTTP2实现的。您需要熟悉HTTP2规范。Protocal生产规则使用ABNF语法。Outline以下是GRPC请求和响应消息流中的一般顺序Request → Request-Headers *Length-Prefixed-Message EOSResponse → (Response-Headers *Length-Prefixed-Mes...

2019-11-20 16:28:17 2205

原创 Linux TCP参数调优

在写这篇文章之前写过一篇文章:tcp too many orphaned sockets 问题引发的思考,里面讲了主要讲了下端口,socket相关也涉及到部分参数调优,但是最近又遇到一些网络方面的问题涉及到一些调参,所以我觉得应该单独整理一片关于TCP调优的博客,也不会显得那么冗余和杂乱了。(下文中涉及到对/etc/sysctl.conf中参数的修改都是永久修改,后文 不再赘述。方法:将参数添加...

2019-11-20 09:06:44 951

翻译 grpc health check

Health checks用于探测服务器是否能够处理rpc请求。客户端到服务器的运行状况检查可以通过点对点或某些控制系统进行。服务器可能未准备好接受请求,正在关闭或其他原因,这时他会选择答复“unhealthy”。如果在某个时间段内未收到响应或响应说不健康,则客户端可以采取相应的措施。GRPC服务可以用作简单的客户端到服务器方案和其他控制系统(例如负载平衡)的运行状况检查机制。grpc作为一个高...

2019-11-18 19:37:45 3116

翻译 grpc keepalive使用指南

keepalive ping是一种通过transport发送HTTP2 ping来检查通道当前是否工作的方法。它是周期性发送的,如果在某个超时周期内该ping没有得到对等方的确认,则传输断开连接。本指南记录了gRPC core中控制keepalive ping行为方式。keepalive ping由两个重要的通道参数控制:GRPC_ARG_KEEPALIVE_TIME_MS此channe...

2019-11-18 18:01:48 14588

原创 CPU的使用率和负载的区别

0x01 CPU使用率这个比较好理解,先来说说这个概念。使用率其实也就是一段时间内 使用时间/总时间直接说CPU的使用率计算方式吧:CPU在t1和t2时间内的使用率=CPU非空闲时间/CPU总时间*100%=(1-CPU的空闲时间/CPU总时间)*100%很好理解。比如一个单核CPU,你程序写个死循环,然后很容易把CPU跑到接近100%,因为死循环不会让出时间片,就会一直占用CPU比...

2019-10-29 22:12:27 1934

原创 写一写关于Paxos和我的理解

这个文章是一年前看Paxos的时候自己的一些笔记和思考。有些翻译自wiki和原论文Paxos Made Simple,也有一部分是参考网上能找到并且觉得很棒的博客。文末都贴出了参考出处。除了这篇还计划着写几篇,包括Paxos具体实现。才疏学浅,如果觉得文章有什么问题欢迎留言讨论。一 相关概念1.paxos协议是用来解决什么问题的paxos协议是用来解决网络中不可靠服务进程之间的共识问题...

2019-10-26 16:43:21 360

原创 WSL2 Ubuntu18运行docker run报错:docker: Error response from daemon: OCI runtime create fail

环境:WSL2 + Ubuntu18win10 版本号:1809docker版本:root@zm:/# docker --versionDocker version 19.03.2, build 6a30dfc运行docker run具体错误信息如下:root@zm:~# docker run hello-worlddocker: Error response from daem...

2019-10-08 11:58:34 3601 1

原创 CephFs 多节点并发读写,mds0: Client XXX:XXX failing to respond to capability release

场景描述:在大概10台机器上面起了50个consumer实例运行,在这10台中选了1台运行一个producer实例。其中每个实例都会挂载cephfs中的同一个目录/online/import到本机。其中producer 会删除目录下的文件其他节点约50多个实例只会读取目录下的文件问题描述:CephFs会产生偶发性warning在Mgr dashboard界面可以看到如下信息cephf...

2019-09-30 11:48:20 1648

原创 快速理解VLAN

(先了解一下交换机)交换机:交换机工作在数据链路层上,与路由器不同,它内部没有网络适配器,即没有IP和MAC地址,只有端口。交换机内部的CPU会在每个端口成功连接时,通过将MAC地址和端口对应,形成一张MAC表也就是说。在数据传输的时候它对接收到的数据包,只负责解开MAC地址,查询对应的端口,然后发送出去。它只负责处理MAC地址,不能处理IP地址。没有VLAN会存在什么问题?(OK,进入正题...

2019-06-19 19:25:32 350

原创 storm学习一之storm概念

(注:本文主要是一些学习笔记,内容多是由文末的参考连接自行整理而来,如觉本文尚浅可以直接参考文末连接)1.storm中的一些术语topology应用程序的所有逻辑被打包到Storm的topology中。Storm的topology类似与MapReduce的job。两者之间的一个不同点就是MR的job最终是会运行结束的,而topology则会一直运行下去,除非人为的kill掉。topolog...

2019-06-13 10:59:27 503

原创 JPS无法查看已经启动的Java进程信息

问题描述:启动Hbase集群中RegionServer后,通过JPS无法查看到该进程号,导致无法通过jstat来查看regionserver的内存情况,来做一些JVM参数调优。在网上查询到的一些信息来看:java程序启动后,默认(请注意是默认)会在/tmp/hsperfdata_userName目录下以该进程的id为文件名新建文件,并在该文件中存储jvm运行的相关信息,其中的userName...

2019-06-03 20:07:39 2952

原创 Java获取一个类的Class对象的四种方式

1.通过ClassLoader对象的loadClass()方法比如以下方式: ClassLoader.getSystemClassLoader().loadClass("com.my.test.Hello")去看一下loadClass的源码:public Class<?> loadClass(String name) throws ClassNotFoundExceptio...

2019-05-04 10:14:39 10187

原创 深入Java虚拟机二:类的生命周期和加载流程

如下图所示,从上往下按照顺序排列。其中加载–>验证–>准备–>初始化–>卸载这个5个阶段的顺序是固定的,解析和使用阶段视情况的而定。...

2019-05-03 11:14:13 130

原创 深入Java虚拟机一:类文件结构

这个系列的博客大多是阅读《深入理解Java虚拟机》后整理而来,是本好书值得读好多遍。写在前面:1.先引用一下书中的话:Class文件各个数据项目严格按照顺序紧凑地排列着,中间没有添加任何分隔符因为Class文件要保持经凑,在一些不定长的数据结构中就经常会出现如下结构数据长度length数据data其中length表示了紧随其后的data所占字节数。2.consta...

2019-05-01 16:52:40 154

原创 tcp too many orphaned sockets 问题引发的思考

起因:服务器上部署了单个golang编写的HTTPDNS实例,一个固定的端口9981对外提供服务。当QPS达到几十万以上时,该实例崩溃,且无法再次启动dmesg 查看系统日志,发现大量日志,如下:TCP:too many orphaned sockets看到这个日志想到了可能是sockets资源耗尽了。下面来分析下如何解决吧1.端口与socket端口Linux下端口号范围0~6553...

2019-04-01 19:09:09 11819

原创 记一次Cephfs客户端读写大文件卡死问题解决

环境集群版本:12.2.10集群启动了个MDS,其中三个active 一个standby客户端内核3.10,使用ceph-fuse 12.2.10进行挂载使用,挂载到客户机/data1/test目录下使用情况往/data1/test中cp小文件无异常,但是使用中cp一个3GB大小的文件时候,发现cp运行了一会就卡死了,CTRL+C和kill都无法杀死cp进程。这个时候在其他机器上挂载该路...

2019-03-08 17:26:49 3217 1

原创 Ceph RBD 和Cephfs 的使用指南(映射挂载卸载)

RBD映射tips:rbd的映射需要Linux内核支持ceph和rbd模块,可以通过命令modprobe ceph、modprobe rbd来判断在挂载 rbd之前需要下载对应版本的ceph-common,最好是&amp;gt;=集群版本,否则可能出现兼容性问题低版本的Linux内核可能导致各种挂载问题,是因为内核模块开发进度跟不上Ceph开发进度导致。可以升级内核,或者使用NBD方式挂载总...

2019-03-02 10:06:05 5490

原创 Linux 五种IO模型

1. 一些概念1.1进程切换:百科进程阻塞:百科 进程进入阻塞状态也就让出了CPU资源,等相应的事件出现才被唤醒同步与异步:关注的是消息通信机制 (synchronous communication/ asynchronous communication)。如果在函数调用返回的时候就能得到结果,那这就是同步的;相反,如果在函数调用返回的时候还不能得到结果,而是要等到适当的时候才能得到结果...

2019-02-19 20:21:12 375

原创 Java静态代理和动态代理

代理类的两个优点:可以隐藏委托类的实现可以实现客户与委托类间的解耦,在不修改委托类代码的情况下能够做一些额外的处理。1静态代理UML图如下:ServiceInterface: 服务接口类ServiceImpl:服务具体实现类,也就是被代理类,即委托类Proxy:代理类。ServiceImpl和Proxy都继承自同一个接口,proxy类通过包含一个ServiceImpl的引...

2019-02-18 17:56:57 235

原创 Java 线程池二之Executors创建的五种线程池及使用注意

0x01 关于ThreadPoolExecutor上一篇博客已经说了,Executors就是一个工具类。他创建线程池时,实际上是通过如下:new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, milliseconds,runnableTaskQueue, handler);corePoolSize:线程...

2018-12-02 20:43:49 2395

原创 Java 线程池一之使用线程池的好处,以及Executors类

最近准备详细的复习下Java线程池相关的所以知识。就从我们最初使用线程池开始,也就是Executors,慢慢展开。0x01先谈谈为什么要使用线程池第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳...

2018-12-02 20:42:35 1894

原创 SpringBoot中使用@scheduled定时执行任务需要注意的坑

要注意什么坑不绕弯子了,直接说这个坑是啥:SpringBoot使用@scheduled定时执行任务的时候是在一个单线程中,如果有多个任务,其中一个任务执行时间过长,则有可能会导致其他后续任务被阻塞直到该任务执行完成。也就是会造成一些任务无法定时执行的错觉可以通过如下代码进行测试: @Scheduled(cron = "0/1 * * * * ? ") public void ...

2018-11-27 10:45:45 54261 13

原创 关于非对称加密的原理及使用

0.关于非对称加密非对称加密(英语:asymmetric cryptography),是密码学的一种算法,它需要两个密钥,一个是公开密钥,另一个是私有密钥;一个用作加密的时候,另一个则用作解密。使用其中一个密钥把明文加密后所得的密文,只能用相对应的另一个密钥才能解密得到原本的明文;甚至连最初用来加密的密钥也不能用作解密。由于加密和解密需要两个不同的密钥,故被称为非对称加密;不同于加密和解密都使...

2018-11-24 10:17:31 1635

原创 shell中打印换行

三种方式1.转义echo "a\na\\nc"2.使用 -e 参数echo -e "a\na"//-e enable interpretation of backslash escapes (启用反斜杠转义)3.使用字符串展开 ($’'的用法还有待研究)echo $'a\na'参考...

2018-10-04 17:38:39 5409 2

原创 RAM的存储容量,以及地址线,数据线

0x01.半导体存储芯片的基本结构(图片来自与网络,也可参考王道计算机组成原理复习指导)对图中的一些解释:RAM中负责存储数据的部分就是存储矩阵,光看“矩阵”两个字大家应该也能够想到,其是由大量存储单元列阵构成。地址线:是单向输入的,用于确定数据的存储地址片选线:用于确定哪个存储芯片被选中数据线:是双向的,用于输入或输出数据0x02.存储单元最小的存储单元当然就是1bit了...

2018-09-22 16:14:12 57629 4

原创 Ubuntu16.04或18.04上安装QQ微信迅雷

0. 写在前面没办法,公司的电脑是Windows的,windows下面开发实在太恶心人,于是开始了Linux的折腾之路。如果你只是想用Linux环境开发,而有不想折腾,你可以直接安装deepin系统。上面各类软件齐全(QQ,微信,网易云音乐,搜狗输入法,截图,录屏,有道云笔记等等),还是仿mac风,整体都还是不错的,但是我为啥又转Ubuntu16了呢?因为deepin用了一个发现双显示器时它...

2018-09-22 11:20:56 2636 5

原创 Linux shell中2>&1的含义解释 (全网最全,看完就懂)

A.首先了解下1和2在Linux中代表什么 名称 代码 操作符 Java中表示 Linux 下文件描述符(Debian 为例) 标准输入(stdin) 0 &amp;amp;lt; 或 &amp;amp;lt;&amp;amp;lt; System.in /dev/stdin -&amp;amp;gt; /proc/self/fd/0 -&amp;amp;gt; /dev/pts/0 标准输出(stdout

2018-09-11 18:39:02 169037 46

原创 Java Annotation实现原理浅析(上)

0.之前的一篇博客中写了写关于Annotation使用相关的,今天来分析下Annotation是实现原理 由于RetentionPolicy.SOURCE RetentionPolicy.CLASS的两种注解是JVM不可见的(在程序运行时,就无法使用到该注解)所以不做分析。 Test.javaimport java.lang.annotation.ElementType;impo...

2018-09-09 15:14:24 1739

原创 修改Maven settings.xml 后配置未生效

1.问题描述:自己修改了下 ${M2_HOME}/conf/settings.xml中的本地repository地址,但是重新执行mvn的时候发现repository地址并没有改变。那么问题所在?2.settings.xml文件位置 settings.xml文件一般存在于两个位置: 全局配置: ${M2_HOME}/conf/settings.xml 用户配置: u...

2018-08-29 19:17:30 26525 6

原创 浅谈控制反转(IoC)与依赖注入(DI)在Spring中应用

0.相关概念IOC Inversion of Control 控制反转 DI Dependency Injection 依赖注入DI 是实现IOC的一方式来自wikipedia: 控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injec...

2018-08-20 19:14:07 596

原创 关于磁盘你需要知道的所有基础知识都在这了

1.一些概念磁头 Head磁面 Side一个磁面对应一个磁头,即磁面数量等于磁头数量磁道 Track一个盘面上的相同半径的圆形区域柱面 Cylinder所以盘面上相同半径的磁道组成的区域扇区 Sector一个磁道上的一个弧段,是磁盘的最小存储单位簇(块)Windows下如NTFS等文件系统中叫做簇;在Linux下如Ext4等文件系...

2018-08-03 13:46:46 499

原创 Linux下查找磁盘盘符与机器槽位Slot的对应关系

0.闲说云服务是三分开发七分运维??? 好像说的并没有错啊!o(╯□╰)o 今天运维公司对象存储系统,发现坏盘,联系网络组换盘,结果网络组希望我提供坏盘的Slot位置。1.关于RAID卡  先了解个东西RAID卡。 RAID: Redundant Array of Independent Disks 这个RAID卡就相当于一个小型集成电脑了(有自己的CPU、缓存),专门用来...

2018-08-02 15:11:36 23852

原创 Java annotation注解使用及全面解析

首先Java注解是什么?注解就是一个标签。通过注解你可以给类or方法or变量添加一个标签。除此之外它没有其他作用了。你所见到的那些关于注解的神奇用法其实都是Java反射和编译器的功劳。1.元注解(一切注解的老祖宗:用了给注解贴标签的注解) - @Documente表示拥有该注解的元素可通过javadoc此类的工具进行文档化。该类型应用于注解那些影响客户使用带注释(commen...

2018-06-22 16:55:07 381

原创 Golang数组与Slice,以及append函数的陷阱

Golang中数组的概念与C中相差无几。1.声明一个数组var array [5]int //声明一个数组。var array2 [5]int array2=array //两个数组变量赋值,这个操作会导致一次数组的拷贝。//比如func test(){ var array =[5]int{2,3,4,5,6} var array2 [5]int ...

2018-06-21 19:44:55 26566 7

原创 Java中char占多少字节

-有些人可能很纳闷,在看资料书的时候书上Java基础数据类型章节中明明写着char在Java中占两个字节,但是自己去实践的时候却发现英文字母只占一个字节,而中文占两个字节???为啥????一、内码与外码这里涉及到两个概念:内码(internal encoding)和外码(external encoding) 这个知乎回答里有很好的解释:https://www.zhihu.com/question/

2018-03-18 18:01:46 10996 2

原创 Java中byte做&0xff运算的原因及解析

Java中byte数据使用到&amp;0xff的原因及解析网上瞎写的一大堆,实在是无语。把自己理解的整理分享给大家。 首先要知道原码、反码、补码是什么。可以参考: http://blog.csdn.net/u011080472/article/details/51280919 http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/Com...

2018-03-18 17:23:05 9942 3

用于Linux服务器判断磁盘的Slot

这个包里包含了MegaCli 、LSIUtil 、SAS2IRCU这三个工具

2018-08-09

go1.9.3.linux-amd64.tar.gz官网最新版

Linux 64位安装包。 go1.9.3.linux-amd64.tar.gz官网最新版官网最新版

2018-02-01

官网最新golang安装包 go1.9.2.linux-amd64.tar.gz

从官网下载的最新版golang安装包,Linux 64位 版本:1.9.2 。 go1.9.2.linux-amd64.tar.gz

2018-01-24

gson jar包源码

gson jar包源码,下载后导入eclipse就可以看gson的源码了.

2015-11-15

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除