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
linux linux之内存 问题 RAM为什么不能持久化? 内存管理的最小单位是什么? pagecache是什么? pagecache与buffercache的区别? 线程的内存大小? tmpfs是做什么的? 内存对齐的作用? 内存 概述 内存是计算机的主存储器。内存为进程开辟出进程空间,让进程在其中保存数据。 内存的大小 内存有一个最小的存储单位,大多数都是一个字节。内存用内存地址(memory address)来为每个字节的数据顺序编号。因此,内存地址说明了数据在内存中的位置。内存地址从0开始,每次增加1。这种线性增加的存储器地址称为线性地址(linear address)。为了方便,我们用十六进制数来表示内存地址,比如0x00000003、0x1A010CB0。这里的“0x”
java之DelayQueue延时队列的使用及实现 DelayQueue的使用 Item item1 = new Item("item1", 5, TimeUnit.SECONDS); Item item2 = new Item("item2", 10, TimeUnit.SECONDS); Item item3 = new Item("item3", 15, TimeUnit.SECONDS); DelayQueue<
java jvm之内存自适应 案例1 配置 -Xmx2000m -Xms2000m -XX:NewRatio=4 -XX:SurvivorRatio=4 jstat bash-4.3$ jstat -gc 18 S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
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-三级缓存
java feign 使用tcp连接池 feign实现 跟踪程序断点发现feign每次调用时,均通过(HttpURLConnection) new URL(request.url()).openConnection()建立新的连接 feign使用连接池 pom配置 <dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-httpclient</artifactId> </dependency&
linux zuul Tcp close wait排查 问题 查看服务时,发现某服务中存在一个closewait状态的tcp连接,而且一直无法断开连接 所有服务均为k8s pod 方式部署 分析 查看远端ip bash-4.3$ netstat -tpn|grep 58142 tcp 1 0 10.5.165.124:58142 10.5.185.11:8080 CLOSE_WAIT 1/java bash-4.
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 您所在的省/市/自治区名称是什么?
redis redis键莫名不存在问题排查 问题描述 程序运行过程中,莫名其妙的找不到value,程序代码一切正常,该值设置了过期时间,但是未到过期时间 原因 [root@VM-3-11-centos ~]# redis-cli -h 10.3.x.xx 10.3.9.19:6379[2]> config get maxmemory 1) "maxmemory" 2) "1073741824"
http wireshark配置chrome抓取https报文 启动chrome /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --user-data-dir=/tmp/chrome --ssl-key-log-file=/tmp/chrome/.ssl-key.log 启动wireshark并进行配置 perferences -> Protocols -> TLS 抓取报文 通过上述方式启动的chrome访问https://baidu.com 发现在wireshark中可正常抓取到报文
http http2.0 静态表编码 静态表类型 静态表很简单,只包含已知的header字段。分为两种: name和value都可以完全确定,比如:metho: GET、:status: 200 该情况很好理解,已知键值对直接使用一个字符表示; 只能够确定name:比如:authority、cookie 此种情况稍微说明下:首先将name部分先用一个字符(比如cookie)来表示,同时,根据情况判断是否告知服务端,将 cookie: xxxxxxx 添加到动态表中(我们这里默认假定是从客户端向服务端发送消息) 静态表使用 HTTP/2 将 61
http HTTPS加密及优化 加密算法 AES AES 只支持 3 种不同的密钥长度,分别是 128 位、192 位和 256 位,它们的安全性依次升高,运算时间也更长。比如,当密钥为 128 比特位时,需要经过十轮操作,其中每轮要用移位法、替换法、异或操作等对明文做 4 次变换。而当密钥是 192 位时,则要经过 12 轮操作,密钥为 256
redis Redis键空间通知事件 作用 键空间通知使得客户端可以通过订阅频道或模式, 来接收那些以某种方式改动了 Redis 数据集的事件。 事件通过 Redis 的订阅与发布功能(pub/sub)来进行分发, 因此所有支持订阅与发布功能的客户端都可以在无须做任何修改的情况下, 直接使用键空间通知功能。 因为 Redis 目前的订阅与发布功能采取的是发送即忘(fire and forget)策略, 所以如果你的程序需要可靠事件通知(reliable notification of events), 那么目前的键空间通知可能并不适合你: 当订阅事件的客户端断线时, 它会丢失所有在断线期间分发给它的事件。 开启键空间通知 因为开启键空间通知功能需要消耗一些 CPU , 所以在默认配置下, 该功能处于关闭状态。
linux linux之TCP调优 tcp握手 客户端在等待服务器回复的 ACK 报文。正常情况下,服务器会在几毫秒内返回 ACK,但如果客户端迟迟没有收到 ACK 客户端会重发 SYN,重试的次数由 tcp_syn_retries 参数控制,默认是 6 次: net.ipv4.tcp_syn_retries = 6 第 1 次重试发生在 1 秒钟后,接着会以翻倍的方式在第 2、4、
linux linux之内存&cpu分享 问题 RAM与ROM分别是什么? RAM为什么不能持久化? 内存管理的最小单位是什么? 什么是虚拟内存? cache line的作用? volatile的具体实现? RAM RAM作用 内存的存储单元采用了随机读取存储器(RAM, Random Access Memory)。所谓的“随机读取”,是指存储器的读取时间和数据所在位置无关。与之相对,很多存储器的读取时间和数据所在位置有关。就拿磁带来说,我们想听其中的一首歌,必须转动带子。如果那首歌是第一首,那么立即就可以播放。如果那首歌恰巧是最后一首,我们快进到可以播放的位置就需要花很长时间。 RAM的存储 RAM依赖电容器存储数据。电容器充满电后代表1(二进制),未充电的代表0。 这样的话,
mysql mysql中tinyint、smallint、int、bigint的区别 tinyint 从 -2^7 (-128) 到 2^7 - 1 (123) 的整型数据。存储大小为 1 个字节。 unsigned 是从 0 到 255 的整型数据。 所以建表的时候 只能是tinyint(3),哪怕你建tinyint(100),他最大还是3位这么多。 smallint 从 -2^15 (-32,768)
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切换状态阻塞解决-存储缓存(
other mac电脑cpu信息 查看cpu型号,核心数,线程 bogon:~ liukai$ sysctl machdep.cpu.brand_string # cpu型号 machdep.cpu.brand_string: Intel(R) Core(TM) i7-4770HQ CPU @ 2.20GHz # 核 bogon:~ liukai$ sysctl -n machdep.cpu.core_count 4
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×
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]
linux linux系统之磁盘存储 问题 ls的size表示什么,与du查看大小的区别是什么? 为什么目录占空间大小为4096? 分区是按盘面还是柱面? 软连接和硬连接有什么区别? 文件名存储在inode还是文件对应的block中? 磁盘结构 盘片、盘面、磁头 硬盘中一般会有多个盘片组成,每个盘片包含两个面,每个盘面都对应地有一个读/写磁头。受到硬盘整体体积和生产成本的限制,盘片数量都受到限制,一般都在5片以内。盘片的编号自下向上从0开始,如最下边的盘片有0面和1面,再上一个盘片就编号为2面和3面。 磁道、扇区 磁道 上图显示的是一个盘面,盘面中一圈圈灰色同心圆为一条条磁道 扇区 从圆心向外画直线,可以将磁道划分为若干个弧段,每个磁道上一个弧段被称之为一个扇区(图践绿色部分) 扇区是磁盘的最小组成单元,通常是512字节。
linux Linux磁盘与分区 目录 磁盘分区 磁盘分区概述 linux磁盘设备文件 主分区、扩展分区与逻辑分区 分区大小 Windows和Linux分区区别 分区机制 MBR GPT 物理扇区及逻辑扇区 ext文件系统 EXT2概述 Superblock GDT(group descriptor table) inode bitmap block bitmap data block inode table ext4 目录是特殊的文件 journal日志 journal block的创建 journal挂载选项
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文件系统对应的分区的卷标。 卷标: