何足道哉


  • 首页

  • 标签

  • 分类

  • 归档

  • 搜索

记一次生产故障排查

发表于 2019-10-13 | 分类于 故障
前言收到生产某服务多台机器报警,cpu飙到100%,系统无法正常提供服务。故开始排查问题。 分析一、分析cpu过高的原因tomcat进出把cpu占满了cpu。使用命令top top -H -p pid查到tomcat进程中相应的线程。将查到的线程号转成十六进制printf "%x\n" tid。然后使用命令jstack pid | tid -A 50查看线程快照。判断是因为频繁full gc引起的cpu飙高。 二、分析频繁full gc的原因首先先查看了jvm的堆内存配置。整个堆内存约为5.5个G,其中青年代分了3个G,老年代分了2.5个G。 再使用命令jstat -g ...
阅读全文 »

Lambda、Stream

发表于 2018-12-13 | 分类于 jdk
Lambda语法 参数类型省略–绝大多数情况,编译器都可以从上下文环境中推断出lambda表达式的参数类型。 123456(param1,param2, ..., paramN) -> { statment1; statment2; // ...... return statmentN;} 当lambda表达式的参数个数只有一个,可以省略小括号 123456param1 -> { statment1; statment2; // ...... return statmentN;} 当lambda表达式只 ...
阅读全文 »

代理与AOP

发表于 2018-10-17 | 分类于 设计模式
代理代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。简言之,代理模式就是设置一个中间代理来控制访问原目标对象,以达到增强原对象的功能和简化访问方式。 举个例子,我们生活中经常到火车站去买车票,但是人一多的话,就会非常拥挤,于是就有了代售点,我们能从代售点买车票了。这其中就是代理模式的体现,代售点代理了火车站对象,提供购买车票的方法。 静态代理这种代理方式需要代理对象和目标对象实现一样的接口。 角色 Subject:被代理的接口,定义了方法DoAction(); 12345publi ...
阅读全文 »

Paxos算法

发表于 2018-10-02 | 分类于 分布式
Paxos算法Paxos算法是一种基于消息传递且具有高度容错性的一致性算法,是最有效的解决分布式一致性问题的算法之一。 参与角色 Proposer: 倡议者可以提出提案以供投票表决 Acceptor:提案接收者,并可以进行投票表决 Learner:提案接受者,没有投票权 条件 一个Acceptor必须批准它收到的第一个提案 如果一个提案[M,V]被选定后,那么之后任何Proposer产生的编号更高的提案,其Value值都为V 算法陈述Paxos算法需要一个类似于两阶段提交的执行过程。 阶段一 Proposer选择一个提案编号M,然后向Acceptor的某个超过半数的子集成员发送编号为M的P ...
阅读全文 »

关于RocketMQ

发表于 2018-10-01 | 分类于 中间件
架构图 NameServerNameServer是RocketMQ的名称服务器,主要负责对Topic和路由信息的管理。各个角色的组件都需要定期向NameServer上报自己的状态,超时不上报的话,NameServer会认为某个机器出现了故障,其他组件会把这个机器从可用列表中移除。 特点 NameServer集群中各节点之间互不通信,其他组件同时向所以NameServer上报信息; NameServer中管理的数据全部保存在内存当中,不会持久化存储; 如果中途所有NameServer全都挂了,只会影响到路由信息的更新,不会影响客户端和Broker的通信。 BrokerBroker是Rocket ...
阅读全文 »

握手和挥手

发表于 2018-09-27 | 分类于 TCP/IP
三次握手TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接。 (1)第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。 (2)第二次握手:服务器B收到SYN包,必须确认客户A的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态。 (3)第三次握手:客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。 完成三次握 ...
阅读全文 »

多路复用

发表于 2018-09-27 | 分类于 IO
文件描述符Linux 系统中,把一切都看做是文件,当进程打开现有文件或创建新文件时,内核向进程返回一个文件描述符,文件描述符就是内核为了高效管理已被打开的文件所创建的索引,用来指向被打开的文件,所有执行I/O操作的系统调用都会通过文件描述符。 多路复用I/O多路复用通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪,就是这个文件描述符进行读写操作之前),能够通知程序进行相应的读写操作。但select(),poll(),epoll()本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写, ...
阅读全文 »

虚拟机监控工具

发表于 2018-09-04 | 分类于 JVM
jps显示系统内所有虚拟机进程。 选项 作用 -q 只输出LVMID,省略主类的名称 -m 输出虚拟机进程启动时传递给主类main()函数的参数 -l 输出主类的全名,如果进程执行的是jar包,输出jar路径 -v 输出虚拟机进程启动时jvm参数 12345678[root ~]$ jps -l87799 org.apache.catalina.startup.Bootstrap319117 org.apache.catalina.startup.Bootstrap182013 com.creditease.mscp.boot.MSCPBoot241863 or ...
阅读全文 »

disruptor

发表于 2018-08-31 | 分类于 并发
RingBufferRingBuffer,即环形的缓冲区。RingBuffer底层是使用数组结构实现的,因为数组对处理器的缓存机制更加友好。同时,为了避免垃圾回收,在数组初始化后就创建event填充数组。 指针偏移RingBuffer拥有一个序号,这个序号指向数组中下一个可用的元素。随着你不停地填充这个buffer,这个序号会一直增长,直到绕过这个环。所以,必须根据序号来确定元素在数组中的位置。 取模取模是最简单最常用的方法。通过序号对数组长度取模来确定元素在数组中的位置。 1index = sequence mod array.length 例如:数组长度为8,序号为12,则元素位于12 ...
阅读全文 »

网络模型

发表于 2018-08-26 | 分类于 TCP/IP
ISO/OSI七层网络模型 物理层物理层包括物理传输介质(电缆或无线介质),任何网络都必须使用传输介质来发送和接收信号,这些信号构成了网络通信的物理表示。物理层的任务就是建立、维持和断开网络连接。 数据链路层数据链路层的任务是,在发送方确保实现物理层数据的可靠传输;在接收方检验锁收到的数据的可靠性。 网络层网络层的主要功能是对Internet上的每一台主机提供一个全球唯一的地址,并提供主机之间的通信路径。 传输层传输层的任务就是确保从发送方到接收方数据的可靠的端到端传输。为了确保这一功能的实现,传输层包含了端到端的错误检测和错误恢复数据。 会话层会话层是在发送方和接收方之间进行通信时创建、维持 ...
阅读全文 »
12…4

傅鹏

34 日志
16 分类
60 标签
© 2019 傅鹏
由 Hexo 强力驱动
|
主题 — NexT.Muse v5.1.4