java

容器及java oom

容器oom 原因 当容器设置 memory limit 过小时,并且容器进程需要的memory大于 容器limit内存时,会报出容器oom,即进程可申请的内存小于系统分配给该进程的内存时oom 结果 linux内核会kill掉该进程,即容器会因为oom重启 解决方案 调大memory limit或限制进程使用内存大小 java.lang.OutOfMemoryError: Java heap space 原因 在启动java程序时,可设置堆内存大小xmx,如果该值设置的过小,导致jvm gc回收空间过小,并且堆无空间分配新的对象,即会报出java.lang.OutOfMemoryError: Java

  • 刘凯
1 min read
linux

linux之内存

问题 RAM为什么不能持久化? 内存管理的最小单位是什么? pagecache是什么? pagecache与buffercache的区别? 线程的内存大小? tmpfs是做什么的? 内存对齐的作用? 内存 概述 内存是计算机的主存储器。内存为进程开辟出进程空间,让进程在其中保存数据。 内存的大小 内存有一个最小的存储单位,大多数都是一个字节。内存用内存地址(memory address)来为每个字节的数据顺序编号。因此,内存地址说明了数据在内存中的位置。内存地址从0开始,每次增加1。这种线性增加的存储器地址称为线性地址(linear address)。为了方便,我们用十六进制数来表示内存地址,比如0x00000003、0x1A010CB0。这里的“0x”

  • 刘凯
31 min read
java

spring bean factory介绍

问题 singletonObjects与earlySingletonObjects的作用 如果singletonFactories中存放的内容 如何解决循环引用问题 aop对应的代理类如何保存实例 spring 缓存 singletonObjects-一级缓存 private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256); spring 单例对象集合,所有的实例实例化完成后均需要保存在该变量中,该变量的key为bean name,value为spring管理的实例 在spring 创建实例完成后,添加至该缓存中,并且将该实例从earlySingletonObjects中移除,且将该实例对应的factory从singletonFactories中移除 singletonFactories-三级缓存

  • 刘凯
2 min read
http

http2.0实战

生成证书 keystore以及服务器密钥对儿的生成 bogon:cert liukai$ keytool -genkeypair -alias rabbitsslkey -keyalg RSA -validity 3650 -keystore rabbitkeystore.jks 输入密钥库口令: 再次输入新口令: 您的名字与姓氏是什么? [Unknown]: localhost 您的组织单位名称是什么? [Unknown]: localhost 您的组织名称是什么? [Unknown]: localhost 您所在的城市或区域名称是什么? [Unknown]: localhost 您所在的省/市/自治区名称是什么?

  • 刘凯
6 min read
http

http2.0

静态表编码 静态表类型 静态表很简单,只包含已知的header字段。分为两种: name和value都可以完全确定,比如:metho: GET、:status: 200 该情况很好理解,已知键值对直接使用一个字符表示; 只能够确定name:比如:authority、cookie 此种情况稍微说明下:首先将name部分先用一个字符(比如cookie)来表示,同时,根据情况判断是否告知服务端,将 cookie: xxxxxxx 添加到动态表中(我们这里默认假定是从客户端向服务端发送消息) 静态表使用 HTTP/2 将 61

  • 刘凯
15 min read
redis

Redis键空间通知事件

作用 键空间通知使得客户端可以通过订阅频道或模式, 来接收那些以某种方式改动了 Redis 数据集的事件。 事件通过 Redis 的订阅与发布功能(pub/sub)来进行分发, 因此所有支持订阅与发布功能的客户端都可以在无须做任何修改的情况下, 直接使用键空间通知功能。 因为 Redis 目前的订阅与发布功能采取的是发送即忘(fire and forget)策略, 所以如果你的程序需要可靠事件通知(reliable notification of events), 那么目前的键空间通知可能并不适合你: 当订阅事件的客户端断线时, 它会丢失所有在断线期间分发给它的事件。 开启键空间通知 因为开启键空间通知功能需要消耗一些 CPU , 所以在默认配置下, 该功能处于关闭状态。

  • 刘凯
3 min read
linux

linux之内存&cpu分享

问题 RAM与ROM分别是什么? RAM为什么不能持久化? 内存管理的最小单位是什么? 什么是虚拟内存? cache line的作用? volatile的具体实现? RAM RAM作用 内存的存储单元采用了随机读取存储器(RAM, Random Access Memory)。所谓的“随机读取”,是指存储器的读取时间和数据所在位置无关。与之相对,很多存储器的读取时间和数据所在位置有关。就拿磁带来说,我们想听其中的一首歌,必须转动带子。如果那首歌是第一首,那么立即就可以播放。如果那首歌恰巧是最后一首,我们快进到可以播放的位置就需要花很长时间。 RAM的存储 RAM依赖电容器存储数据。电容器充满电后代表1(二进制),未充电的代表0。 这样的话,

  • 刘凯
16 min read
linux

linux之cpu cache

CPU缓存概述 为什么需要CPU缓存 cpu缓存访问速度 cpu缓存介绍 CPU Cache Cache 结构 cache寻址方式 Cache Entry & Cache line L3 Cache CPU高速缓存读操作 直接映射寻址过程 组关联寻址过程 Cache Miss CPU高速缓存写操作 缓存写入策略 写直达 写回 缓存一致性协议 MESI MESI协议缓存状态 MESI状态转换 多核缓存协同操作 读写屏障 MESI优化和他们引入的问题 CPU切换状态阻塞解决-存储缓存(

  • 刘凯
32 min read
linux

linux之CPU

问题 CPU的规格一样吗? 多核 CPU 和多个 CPU 有何区别? CPU线程切换时,CPU缓存中的数据如何变化? CPU概述 cpu作用 CPU只执行三种基本的操作,分别是读出数据、处理数据和往内存写数据。 cpu规格 主流CPU还是Intel和AMD两家的天下。无论是高端还是低端,两大品牌都有着全线的产品。 Intel和AMD的规格是不同的,根据根据主板的cpu接口选择适当的cpu,值得一提的是,同样的Intel,不同系列的cpu,规格也不同,如i3~9与至强系列 系列 尺寸 接口 i3~i9 37.5×

  • 刘凯
20 min read
linux

linux之手动实现容器

目录隔离 创建目录 在工作目录下创建/usr,并将本机该目录下的所有文件copy到工作目录中 启动程序 启动单独mount namespace的程序 unshare -m bash 如果通过unshare命令后,挂载目录后,在其它的mount namespace中仍然可以通过 mount 命令查到,则下载最新的unshare可执行文件 挂载目录 当通过docker run -v挂载目录时,将某个容器外的目录挂载至容器内 mount --bind /data1 data 发现在该mount namespace中,mount命令执行结果如下 [root@k8s-master mount]

  • 刘凯
10 min read
linux

linux系统之磁盘存储

问题 ls的size表示什么,与du查看大小的区别是什么? 为什么目录占空间大小为4096? 分区是按盘面还是柱面? 软连接和硬连接有什么区别? 文件名存储在inode还是文件对应的block中? 磁盘结构 盘片、盘面、磁头 硬盘中一般会有多个盘片组成,每个盘片包含两个面,每个盘面都对应地有一个读/写磁头。受到硬盘整体体积和生产成本的限制,盘片数量都受到限制,一般都在5片以内。盘片的编号自下向上从0开始,如最下边的盘片有0面和1面,再上一个盘片就编号为2面和3面。 磁道、扇区 磁道 上图显示的是一个盘面,盘面中一圈圈灰色同心圆为一条条磁道 扇区 从圆心向外画直线,可以将磁道划分为若干个弧段,每个磁道上一个弧段被称之为一个扇区(图践绿色部分) 扇区是磁盘的最小组成单元,通常是512字节。

  • 刘凯
7 min read
linux

linux存储相关命令

磁盘操作 fdisk-查看及管理分区 分区操作 df-分区情况统计 mount/umount-挂载/取消挂载 tune2fs-调整和查看ext2/ext3文件系统参数 blkid-查看文件系统基本信息 e2label-设定分区的label blockdev-获取/设置块设备的属性值 dumpe2fs-查看分区详细信息 格式化 mkfs-格式化分区 mke2fs-格式化ext系统分区 文件操作 du-查看占用空间大小 ls-列出文件 stat-显示文件详细信息 fuser-查找使用文件的进程 检查/修复分区 fsck-检查并修复linux文件系统 badblocks-检查硬盘坏道 filefrag-查看文件碎片报告 e2label 作用 e2label命令,用于获取或设置ext2、ext3文件系统对应的分区的卷标。 卷标:

  • 刘凯
15 min read