后端开发
zhangyanfei01
欢迎关注个人公众号:开发内功修炼
展开
-
文件过多时ls命令为什么会卡住?
不知道你有没有遇到过当一个文件夹下文件特别多,在下面执行ls命令的时候要等好长时间才能展现出来的问题?如果有,你有想过这是为什么吗,我们该如何解决? 要想深入理解这个的问题产生的原因,我们就需要从文件夹占用的磁盘空间开始讨论了。欢迎关注微信公众号:开发内功修炼inode消耗验证在《新建一个空文件占用多少磁盘空间?》中我提到了每一个文件会消耗其所在文件夹中的一点空间。文件夹呢,其实也一样...原创 2020-04-29 07:39:18 · 1481 阅读 · 0 评论 -
只有1个字节的文件实际占用多少磁盘空间?
在前文《新建一个空文件占用多少磁盘空间?》中我们了解到了一个空文件的磁盘开销,包括inode和目录项。 今天我们再思考另外一个问题,假如我们给文件里只写入1个字节,那么除了inode和目录项以外,这个文件实际的磁盘还会占用多少空间,难道真的是1个字节吗?欢迎关注微信公众号:开发内功修炼查看1个字节的文件和前文一样,先不谈原理,直接动手操作。# mkdir tempDir# cd...原创 2020-04-29 07:37:36 · 1182 阅读 · 0 评论 -
新建一个空文件占用多少磁盘空间?
今天我们来思考一个简单的问题。在Linux下你用touch命令新建一个空文件,touch empty_file.txt操作完成后,是否要消耗掉我们的一些磁盘空间?需要的话,大概能消耗多少?嗯,是的,这个问题简单的超乎你的想象,但是不知道你否能给你自己一个满意的答案。我前面的几篇文章都是介绍的磁盘物理层面的构成,但这对于理解文件相关的问题帮助可能还不够。从今天开始让我们从物理层往上走,...原创 2020-04-29 07:35:14 · 601 阅读 · 0 评论 -
拆解固态硬盘结构
前面几篇文章,主要围绕的是机械硬盘来说的。目前ssd目前应用也越来越广了,值得我们花精力琢磨琢磨。SSD硬盘是地地道道电子技术下的产品,因为不像机械硬盘IO时依赖两个耗时的机械轴行为:磁盘旋转,以及磁道寻道,SSD硬盘的访问延迟要比机械硬盘要低的多,在随机IO下的表现尤其明显。我们今天从最底层出发,看看SSD的几个内部机理。欢迎关注微信公众号:开发内功修炼SSD的组成结构机械硬盘和ss...原创 2020-04-29 07:33:27 · 4165 阅读 · 0 评论 -
我们怎么解决机械硬盘既慢又容易坏的问题?
我们使用的计算机的全称叫电子计算机,前面有电子两个字,这说的是整个计算机中的核心元器件基本上都是电子单元组成的。但机械硬盘却是一个特殊的例外,它更多是用机械技术做出来的一个产品。当把带有机械技术基因的磁盘搭到计算机,尤其是再应用到服务器领域的时候,暴露出了机械技术的两个严重问题:第一,速度慢。 如果把内存和CPU的速度比作汽车和飞机的话,这个大哥毫秒级别的延迟几乎就是牛车级别的。 第二,容易...原创 2020-04-28 08:25:37 · 880 阅读 · 0 评论 -
磁盘分区也是隐含了技术技巧的
在前文《磁盘开篇:扒开机械硬盘坚硬的外衣!》中,我们了解了机械硬盘的物理构造,是由磁盘面,磁道、扇区等更小的单位组成的,如下图:图1 机械磁盘内部构造分区是操作系统对磁盘进行管理的第一步,这也是我们任何一个计算机使用者都非常熟悉的概念。例如Windows下的C、D、E、F盘。那么请思考一下,如果你是操作系统的设计者,让你把整块磁盘分成C、D等分区,你会怎么分呢?为了方便讨论,我们这...原创 2020-04-28 08:23:46 · 499 阅读 · 0 评论 -
磁盘开篇:扒开机械硬盘坚硬的外衣
刚看了一下,上一次我分享完内存篇的时候是2019年12月25号。没想到在我酝酿和打磨磁盘篇的这段时间里,我们的生活发生了如此大的变化。人类一直觉得自己是地球上所有生物的主宰,没想到这次被一个小小的病毒狠狠地咬了一口,而且还在欧美继续猖狂。也许是人类安逸太久了,早已经没有原始社会那种需要战战兢兢过日子的心态,在病毒初见端倪的时候,并没有得到足够的重视。甚至中国已经和病毒进行着全国大战役的时候,欧美的...原创 2020-04-28 08:22:02 · 288 阅读 · 0 评论 -
开发内功修炼内存篇汇总
最近终于抽空把内存篇更新完了,我分享出来的这些问题,其实都是我之前没有搞的特别明白的困惑。刚刚开始的时候,可能就是在我脑子里蹦出的一个疑问,比如内存随机IO会比顺序IO慢吗? 为了解开这个疑惑,我曾经在网上各种搜索,也去到过国家图书馆翻书,动手搞代码进行性能测试。最终总算是给了自己一个相对比较满意的答案,终于在今年我抽空给大家分享了出来。在这个解惑过程中,我越来越深地感受到国内的技术圈的特点。...原创 2020-04-28 08:19:08 · 605 阅读 · 0 评论 -
挑战Redis单实例内存最大极限,“遭遇”NUMA陷阱!
我们公司的基础架构部有个云Redis平台,其中Redis实例在申请的时候可以自由选择需要的内存的大小。然后就引发了我的一个思考,Redis单实例内存最大申请到多大比较合适?假设母机是64GB内存的物理机,如果不考虑CPU资源的的浪费,我是否可以开一个50G的Redis实例?于是我在Google上各种搜索,讨论这个问题的人似乎不多。找到唯一感觉靠谱点的答案,那就是单进程分配的内存最好不要超过一个...原创 2020-04-28 08:17:14 · 1145 阅读 · 0 评论 -
一次内存性能提升的项目实践
现代的开发语言除了C++以外,大部分都对内存管理做好了封装,一般的开发者根本都接触不到内存的底层操作。更何况现在各种优秀的开源组件应用越来越多,例如mysql、redis等,这些甚至都不需要大家动手开发,直接拿来用就好了。所以有些同学也会觉得作为应用层开发的同学没有学习的必要去学习底层。但我想通过本文的实际案例告诉大家,哪怕不直接接触内存底层操作,就只是用一些开源的工具,如果你能理解底层的工作原...原创 2020-04-28 08:14:25 · 224 阅读 · 0 评论 -
PHP7内存性能优化的思想精髓
前面我们讨论了内存的工作原理,也进行了一些性能相关的测试。那么今天开始我们来看几个在实践中的应用。首先我们先从PHP开始。2015年,PHP7的发布可以说是在技术圈里引起了不小的轰动,因为它的执行效率比PHP5直接翻了一倍。PHP7在内存方面,你是否知道作者都进行了哪些优化?几个核心结构体的改进只是表面上看起来优化的几个字节那么简单?让我们先从核心的数据结构改进开始看起。一、PHP7 zv...原创 2020-04-28 08:12:16 · 240 阅读 · 0 评论 -
NUMA架构下的内存访问延迟区别!
现在的服务器物理机CPU一般都是多个CPU,核数也是十几甚至几十核。内存几十GB甚至是上百G,也是由许多条组成的。那么我这里思考一下,这么多的CPU和内存它们之间是怎么互相连接的?同一个CPU核访问不同的内存条延时一样吗?在《内存随机访问也比顺序慢,带你深入理解内存IO过程》中我们了解了内存访问时芯片内部的执行过程,在《实际测试内存在顺序IO和随机IO时的访问延时差异》中我们又进行了实际的代码...原创 2020-04-28 08:08:15 · 1843 阅读 · 0 评论 -
揭穿内存厂家“谎言”,实测内存带宽真实表现
带宽是存储系统一个的一个非常重要的衡量指标,内存带宽指的是CPU从内存读取或写入数据到内存的速率。我们今天来思考一个问题,在你的应用程序里内存的访问带宽能够达到多少?各代内存带宽规格理论上内存带宽的计算公式是:Band Width = Speed * Data Width。在这个公式的基础上,我们来看一下各代规格的内存带宽表现。从上图来看,DDR3代的内存 DDR3代1066M...原创 2020-04-28 08:05:41 · 721 阅读 · 0 评论 -
实际测试内存在顺序IO和随机IO时的访问延时差异
在《内存随机访问也比顺序慢,带你深入理解内存IO过程》一文中,我们理解了内存IO的内部实现过程,知道了内存的随机IO比顺序IO要慢,并对延迟时间进行了大概的估算。那么我们今天来用代码的方式来时间一下,看看在我们的项目工程中,内存访问的在不同的访问场景下延时究竟是个什么表现。先测顺序情况测试原理就是定义一个指定大小的double(8字节)数组,然后以指定的步长去循环。这里面的变量有两个。核心...原创 2020-04-28 08:02:45 · 548 阅读 · 0 评论 -
内存随机也比顺序访问慢,带你深入理解内存IO过程
平时大家都知道内存访问很快,今天来让我们来思考两个问题:问题1:内存访问一次延时到底是多少?你是否会进行大概的估算?例如笔者的内存条的Speed显示是1066MHz,那是否可以推算出内存IO延时是1s/1066MHz=0.93ns? 这种算法大错特错。问题2:内存存在随机IO比顺序IO慢的问题吗? 我们都知道磁盘的随机IO要比顺序IO慢的多(操作系统底层还专门实现了电梯调度算法来缓...原创 2019-10-14 08:52:34 · 1282 阅读 · 6 评论 -
一次系统调用开销到底有多大?
首先说说系统调用是什么,当你的代码需要做IO操作(open、read、write)、或者是进行内存操作(mmpa、sbrk)、甚至是说要获取一个系统时间(gettimeofday),就需要通过系统调用来和内核进行交互。无论你的用户程序是用什么语言实现的,是php、c、java还是go,只要你是建立在Linux内核之上的,你就绕不开系统调用。图1.png大家可以通过strace命令来查看...原创 2019-08-28 19:58:25 · 1544 阅读 · 0 评论 -
追踪将服务器CPU耗光的凶手!
前面我们讨论系统调用的时候结论是耗时200ns-15us不等。不过我今天说的我的这个遭遇可能会让你进一步认识系统调用的真正开销。在本节里你会看到一个耗时2.5ms的connect系统调用,注意是毫秒,相当于2500us!问题描述当时是我的一个线上云控接口,是nginx+lua写的。正常情况下,单虚机8核8G可以抗每秒2000左右的QPS,负载还比较健康。但是该服务近期开始出现一些500状态...原创 2019-08-29 19:15:30 · 502 阅读 · 0 评论 -
软中断竟然是可一个CPU使劲造?
一个奇怪的问题在了解了软中断对CPU的占用之后,如果你动手操作查看过的话,相信会和我一样会遇到下面这个的问题。如果没有实际遇到也没关系,你可以用hping命令制造一些网络接收包来观测。# hping3 -S -p 80 -i 你的服务器ip我当时对一台线上虚机查看软中断造成的CPU开销的时候,发现很奇怪,那就是所有的软中断几乎都是被一个CPU处理的。用top看si列,绝大部...原创 2019-08-31 20:16:48 · 699 阅读 · 0 评论 -
一次简单的redis请求会有哪些CPU开销?
我问大家一个问题,下图中一个最简单的例子,会导致哪些CPU开销产生?你是否能够说清楚?<?php ... $redis->get('test'); ...这个例子一下子就把大家在我的文章里学到的东西和你的实际工作结合起来了。怎么样,是不是足够简单?就是一句php代码从redis实例中获取一个key的value值而已,相信类似的代码你天天都在写。...原创 2019-09-02 20:27:23 · 421 阅读 · 0 评论 -
函数调用太多了会有性能问题吗?
在现代的开发工作中,相信绝大部分的同学手头的项目都不是从第零行代码开始搭建的。各个语言都有自己流行的代码框架,如PHP的有Laravel、CodeIgniter、ThinkPHP等等。大家都是在自己的框架的基础上添加自己的业务代码逻辑,开启开发工作。还记得我们团队有位开发同学当时问过我一个问题,我们用xx框架这么重,一个用户请求过来即使什么也不干,都已经进行了那么多次的函数调用了,适合用来做接口...原创 2019-09-10 14:20:24 · 3683 阅读 · 1 评论 -
为什么内存为什么是以字节为单位的?
我觉得在冯诺依曼体系结构里,CPU和内存是最重要的设备。如果没有CPU和内存,服务器将完全无法运行。 所以继第一阶段分享完了CPU篇之后,今天就开始内存篇。我们以一个最简单的问题开篇,为什么内存地址0x0001和内存地址0x0002之间差的是一个byte,而不是一个bit?我想你对内存存储的计算已经熟练于心,a变量占用内存多少字节,b变量占用内存多少字节。但是你有没有深入思考过,为什么我们用的...原创 2019-09-18 08:12:59 · 6494 阅读 · 2 评论 -
带你深入理解内存对齐最底层原理
相信绝大多数的人都了解内存对齐,对齐后性能高。但是其最最底层的原理是啥呢? 有的人可能会说,因为高速缓存的工作机制。读者你很聪明,这是原因之一。但我今天想挖的是更底层一点的原理,让我们去内存的物理构成里找找答案!内存物理结构我们来了解一下内存的物理构造,一般内存的外形图片如下图: 图1 内存外形图一个内存是由若干个黑...原创 2019-09-21 09:27:48 · 487 阅读 · 0 评论 -
从DDR到DDR4,内存核心频率其实基本上就没太大的进步
从2001年DDR内存面世以来发展到2019年的今天,已经走过了DDR、DDR2、DDR3、DDR4四个大的规格时代了(DDR5现在也出来了)。内存的工作频率也从DDR时代的266MHz进化到了今天的3200MHz。这个频率在操作系统里叫Speed、在内存术语里叫等效频率、或干脆直接简称频率。这个频率越高,每秒钟内存IO的吞吐量越大。但其实内存有一个最最基本的频率叫核心频率,是实际内存电路的工作时...原创 2019-09-26 08:19:22 · 10146 阅读 · 2 评论 -
协程究竟比线程能省多少开销?
前文中中我们用实验的方式验证了Linux进程和线程的上下文切换开销,大约是3-5us之间。这个开销确实不算大,但是海量互联网服务端和一般的计算机程序相比,特点是:高并发:每秒钟需要处理成千上万的用户请求 周期短:每个用户处理耗时越短越好,经常是ms级别的 高网络IO:经常需要从其它机器上进行网络IO、如Redis、Mysql等等 低计算:一般CPU密集型的计算操作并不多即使3-5us的...原创 2019-08-27 18:41:32 · 1621 阅读 · 2 评论