Linux 实战 & 底层机制 & 原理
文章平均质量分 90
Linux 实战 & 底层机制 & 原理
文晓武
专注搜索推荐问答推荐工程领域,涉及到的技术有:Java、ElasticSearch、SpringBoot、SpringCloud、Dubbo、Linux、Docker、Sql、Kafka、RabbitMQ、RocketMQ、MyBatis、XXl-Job、Zookeeper、Nginx、Redis、Tomcat、Git、SVN、Maven、K8S等,每周不定期更新精华文章!
展开
-
CPU 缓存用途及原理详细介绍
基础知识首先,大家都知道现在 CPU 的多核技术,都会有几级缓存,现在的CPU会有三级内存(L1,L2, L3),如下图所示。其中:L1 缓存分成两种,一种是指令缓存,一种是数据缓存。L2 缓存和 L3 缓存不分指令和数据。L1 和 L2 缓存在每一个 CPU 核中,L3 则是所有 CPU 核心共享的内存。L1、L2、L3 的越离 CPU 近就越小,速度也就越快,越离 CPU 远,速度也越慢。再往后面就是内存,内存的后面就是硬盘。我们来看一些他们的速度。L1 的存取速度:4 个 CPU 时钟周期L2 的存取转载 2022-06-20 14:11:10 · 2666 阅读 · 1 评论 -
一文读懂零拷贝技术
零拷贝技术 是编写高性能服务器的一个关键技术,在介绍 零拷贝技术 前先说明一下 用户空间 与 内核空间。用户空间通俗的说,用户空间 就是运行着用户编写的应用程序的虚拟内存空间。在32位的操作系统中,每个进程都有 4GB 独立的虚拟内存空间,而 0 ~ 3GB 的虚拟内存空间就是用户空间 。内核空间内核空间 就是运行着操作系统代码的虚拟内存空间,而 3GB ~ 4GB 的虚拟内存空间就是内核空间。图 1 展示了 用户空间 与 内核空间 在进程虚拟内存空间所在的位置:发送文件为什转载 2022-04-05 23:07:18 · 153 阅读 · 0 评论 -
32位、64位操作系统系统差异对比
想必大家都遇到过这样的问题:安装某个软件的时候,出现提示选择32位版本还是64位版本?我们也可以查看自己的电脑是32位还是64位系统:WindowsLinux大家可能知道32位和64位和系统有关,但其实32 vs 64可以有多重含义。一般情况下,有以下几种可能:PU、程序、操作系统。今天我来给大家一一介绍下:CPU首先,我们要先从什么是位数讲起。计算机中的位数指的是CPU一次能处理的最大位数。在Intel由16位的286升级到386的时候,为了和16位系统兼容,..转载 2022-04-04 23:56:14 · 2833 阅读 · 0 评论 -
Linux的虚拟内存详细介绍
前不久组内又有一次我比较期待的分享:”Linux 的虚拟内存”。是某天晚上加班时,我们讨论虚拟内存的概念时,leader 发现几位同事对虚拟内存认识不清后,特意给这位同学挑选的主题(笑)。之前了解一些操作系统的概念,主要是毕业后对自己大学四年的荒废比较懊恼,觉得自己有些对不起计算机专业出身,于是在工作之余抽出时间看了哈工大在网易云课堂的操作系统公开课,自己也读了一本讲操作系统比较浅的书 《Linux内核设计与实现》,而且去年自己用 C 写简单的服务器时,也追根究底了解了更多的系统底层知识。多亏了这些知识转载 2022-04-04 23:52:42 · 1215 阅读 · 0 评论 -
40 张图解 | Linux 内存背后的那些神秘往事
前言CPU、IO、磁盘、内存可以说是影响计算机性能关键因素,今天就聊探究下内存的那些事儿。内存为进程的运行提供物理空间,同时作为快速CPU和慢速磁盘之间的适配器,可以说是个非常重要的角色。通过本文你将了解到以下内容:本文均围绕Linux操作系统展开,话不多说,我们开始吧!虚拟内存机制当要学习一个新知识点时,比较好的过程是先理解出现这个技术点的背景原因,同期其他解决方案,新技术点解决了什么问题以及它存在哪些不足和改进之处,这样整个学习过程是闭环的。内存为什么需要管理转载 2022-02-09 16:44:04 · 233 阅读 · 0 评论 -
用了这么久 Linux ,才知道这些概念
我们大家应该知道,Linux 和 UNIX 中的文件系统是一个以/为根的树状式文件结构,/ 是 Linux 和 UNIX 中的根目录,同样它也是文件系统的起点。所有的文件和目录都位于 / 路径下,包括我们经常听到的 /usr、/etc、/bin、/home 等。在早期的 UNIX 系统中,各个厂家都定义了自己文件系统的命名构成,比较混乱,而且难以区分。为了避免在 Linux 系统上也出现这种命名混乱的问题,在 1994 年推出了 FSSTND(FileSystem Standard) 的 Linux..转载 2022-02-09 16:57:08 · 85 阅读 · 0 评论 -
CPU load和CPU使用率飙高,系统性能问题如何排查?
压测时或多或少都收到过CPU或者Load高的告警,如果是单机偶发性的,经常会认为是“宿主机抢占导致的”,那事实是否真是如此呢?是什么引起了这些指标的飙高?网络、磁盘还是高并发?有什么工具可以定位?TOP、PS还是vmstat?CPU高&Load高和CPU低&Load高,不同的表征又代表着什么?一 背景知识LINUX进程状态LINUX 2.6以后的内核中,进程一般存在7种基础状态:D-不可中断睡眠R-可执行S-可中断睡眠T-暂停态t-跟踪态X-死亡态Z-僵尸.转载 2022-02-16 09:47:29 · 1727 阅读 · 0 评论 -
彻底理解CPU Load - 这一篇就够了
我们经常去看Linux的平均负载。通过uptime或者top命令就可以显示出,平均负载的内容如下:load average: 0.09, 0.05, 0.01大多数人都对平均负载有所了解:三个数字分别代表了一分钟,五分钟和十五分钟三个时间段内的CPU负载的平均值,而数字越低越好。数字越高表示系统出现了问题或机器过载。但是负载值多少才最合适?谁也说不清楚。首先,我们从最简单的单核处理器的系统进行说明。CPU负载有点类似于交通拥堵程度单核CPU就像一条单行道。想象您是一名交警.有时这条单转载 2022-02-16 10:36:53 · 3542 阅读 · 0 评论 -
Linux用户空间和内核空间是什么?
学习 Linux 时,经常可以看到两个词:User space(用户空间)和 Kernel space(内核空间)。简单说,Kernel space 是 Linux 内核的运行空间,User space 是用户程序的运行空间。为了安全,它们是隔离的,即使用户的程序崩溃了,内核也不受影响。注:虚拟内存被操作系统划分成两块:内核空间和用户空间,内核空间是内核代码运行的地方,用户空间是用户程序代码运行的地方。当进程运行在内核空间时就处于内核态,当进程运行在用户空间时就处于用户态。Kernel sp转载 2022-03-14 15:20:06 · 4103 阅读 · 0 评论 -
原来 mmap 这么简单
在《一文看懂零拷贝技术》中我们介绍了 零拷贝技术 的原理,而且我们知道 mmap 也是零拷贝技术的一种实现。在本文中,我们主要介绍 mmap 的原理。一、传统的读写文件一般来说,修改一个文件的内容需要如下3个步骤: 把文件内容读入到内存中。 修改内存中的内容。 把内存的数据写入到文件中。 过程如图 1 所示:如果使用代码来实现上面的过程,代码如下:read(fd, buf, 1024); // 读取文件的内容到buf...转载 2022-04-04 23:44:18 · 303 阅读 · 0 评论 -
IO多路复用机制详解
服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种:(1)同步阻塞IO(BlockingIO):即传统的IO模型。(2)同步非阻塞IO(Non-blockingIO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。注意这里所说的NIO并非Java的NIO(NewIO)库。(3)IO多路复用(IOMultiplexing):即经典的Reactor设计模式,有时也称为异步阻塞IO,Java中的Selector和Linux中的epoll都是这...转载 2022-03-14 15:54:43 · 4268 阅读 · 1 评论 -
巧用二进制Bitmap,让性能提升100倍,让存储空间减少100倍
假设有一个需求是这样的:在200亿个随机整数中找出某个数是否存在其中?要求效率高,而且要节省内存。我们知道,在Java中,int占4字节,1字节=1byte,1 byte = 8 bit(位)如果用int存储,那就是200亿个int,因而占用的空间约为 (20000000000*4/1024/1024/1024)≈74.5G。内存消耗很大,一般的家用电脑是满足不了需求的,所以将数据存储在内存中存储是不合适的。如果按位存储就不一样了,200亿个数就是200亿位,占用空间约为(2...转载 2022-03-04 22:48:34 · 786 阅读 · 0 评论 -
为什么一个字节是八个bit ?
字节字节是是计算机信息计量单位,一个字节包含八个bit。但是为什么1个字节是8个bit呢,这还得从ascii码说起。ascii码ascii码是计算机一开始使用的编码协议,主要用于记录需要显示的字符和 “0与1”之间的对应。比如按下键盘的a键,就相当于输入了一串0和1的组合,计算机通过查询ascii表知道要显示a。ascii码(举例)这时我们注意到,每个字母都对应8个 0和1的组合一开始的时候,需要显示的字符只有26个英文字母、10个数字、计算符号以及各种特殊符号,这样...转载 2022-03-04 17:56:06 · 7494 阅读 · 0 评论 -
JVM堆内存分配机制
《JVM内存空间》一文提到了,创建对象的时候,对象是在堆内存中创建的。但堆内存又分为新生代和老年代,新生代又细分Eden空间、From Survivor空间、To Survivor空间。我们创建的类到底在哪里?对象优先在Eden分配堆内存分为新生代和老年代,新生代是用于存放使用后准备被回收的对象,老年代是用于存放生命周期比较长的对象。大部分我们创建的对象,都属于生命周期比较短的,所以会存放在新生代。新生代又细分Eden空间、From Survivor空间、To Survivor空间,我们创建的对转载 2022-02-23 15:20:47 · 182 阅读 · 0 评论 -
从字节码角度分析一下try-catch-finally执行流程
环境准备:IntelliJ IDEA 2020.2.3、JDK 1.8.0_181执行顺序我们先来写一段简单的代码:publicstaticinttest1(){intx=1;try{returnx;}finally{x=2;}}答案是1不是2,你答对了吗?大家都知道在TCF中,执行到return的时候会先去执行finally中的操作,然后才会返回来执行return,那这里为啥会是...转载 2022-02-22 16:11:01 · 451 阅读 · 0 评论 -
20张图助你了解JVM运行时数据区
我们的JVM系列已经断更好几天了,小伙伴们在后台疯狂私信阿Q,想看后续内容,今天它来了。相信大家在上篇文章中已经对类加载子系统有了清晰的认识,接下来就让我们来揭开“运行时数据区”的神秘面纱吧。(文章可能有点长,建议先收藏一波)运行时数据区总览内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的JVM对于内存的划分方式和管理机制存在着部分差异。下图就是HotS转载 2022-02-14 19:29:30 · 116 阅读 · 0 评论 -
JVM内存空间详细介绍
JVM会把内存划分成不同的数据区域,那加载的类是分配到哪里呢?下图是内存的各个区域,包括:方法区、堆、虚拟机栈、本地方法栈、程序计数器。方法区方法区用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。类的加载中提到了类加载的五个阶段。在加载阶段,会将字节流所代表的静态存储结构转化为方法区的运行时数据结构,在准备阶段,会将变量所使用的内存都将在方法区中进行分配。程序计数器来一个简单的代码,计算(1+2)*3并返回publicintcal(){...转载 2022-02-14 20:29:49 · 3411 阅读 · 0 评论 -
深入理解 Java 类加载机制
1、谈谈“会”的三个层次对一门语言的学习,这里谈谈我理解的“会”的三个层次:第一层:了解这门语言的语法、写法,我把它叫做 hello world 级别;第二层:了解这门语言的优劣势以及它的生态,了解这门语言的能力范围,我把它叫做应用 级别;第三层:了解这门语言的底层运行机制,这有利于对程序进行调优,以及当程序遇到了比较罕见的问题时能够从根上分析解决它。我把它叫做掌握级别。在简历上写掌握某种语言的,一般面试官也会问一些很深入原理的问题,个人认为比较合理。2、Java类加载机制...转载 2022-02-21 11:02:27 · 746 阅读 · 0 评论