PHP7内存管理 | 机房布线规范 | 路由查询命令tracert的用法

PHP7内存管理 | 机房布线规范 | 路由查询命令tracert的用法

1、Zend内存池

内存池是内核中最底层的内存操作,定义了三种粒度的内存块:chunk、page、slot,每个chunk的大小为2M,page大小为4KB,一个chunk被切割为512个page,而一个或若干个page被切割为多个slot,所以申请内存时按照不同的申请大小决定具体的分配策略:

Huge(chunk):申请内存>2M,直接调用系统分配若干个chunk

Large(page):申请内存>3K(3/4  page_size),<2044K(511 page_size),分配若干个page

Small(slot):申请内存<=3K(3/4 page_size)

2、zend堆结构

PHP7内存管理 | 机房布线规范 | 路由查询命令tracert的用法

chunk由512个page组成,其中第一个page用于保存chunk结构,剩下511个page用于内存分配,page主要用于Large、Small两种内存的分配;heap是表示内存池的一个结构,它是最主要的一个结构,用于管理上面三种内存的分配,Zend中只有一个heap结构。但在多个线程模式下(ZTS)会有多个heap,也就是说每个线程都有一个独立的内存池。

3、内存分配

  • Huge分配

超过2M内存的申请,与通过的内存申请没有太大差别,只是将申请的内存块通过单链表进行了管理。huge的分配实际是分配多个chunk,chunk的分配也是large、small内存分配的基础,它是ZendMM向系统申请内存的唯一粒度。在申请chunk内存时有一个关键操作,那就是将内存地址对齐到ZEND_MM_CHUNK_SIZE,也就是说申请的chunk地址都是ZEND_MM_CHUNK_SIZE的整数倍。

  • Large分配

大于3/4的page_size(4KB)且小于等于511个page_size的内存申请,也就是一个chunk的大小够用(之所以是511个page而不是512个是因为第一个page始终被chunk结构占用),如果申请多个page的话分配的时候这些page都是连续的。如果直到最后一个chunk也没有找到则重新分配一个新的chunk并插入chunk链表。

chunk->free_map利用bitmap来记录每组的page的使用情况。

PHP7内存管理 | 机房布线规范 | 路由查询命令tracert的用法

  1. 首先会直接跳过group1,直接到group2检索。
  2. 在group2中找到第一个可用page位:67,然后向下找到第一个不可用page位置:69,找到的可用内存块长度为2,小于3,表示此内存块不可用。
  3. 接着再次在group2中查找到第一个可用page位置:71,然后向下找到第一个不可用page位置:75,内存块长度为4,大于3,表示找到一个符合的位置,虽然已经找到可用内存块,但并不“完美”,先将这个并不完美的page_num及len保存到best、best_len,如果后面没有比它更完美的就用它了。
  4. 再次检索,发现group2已无可用page,进入group3,找到可用内存位置:page 130-132,大小比c中找到的合适,所以最终返回的page就是130-132。
  5. page分配完成后会将free_map对应整数的bit位从page_num至(page_num+page_count)置为1。
  • Small分配

Small内存指的是小于(3/4 page_size)的内存,这些内存首先也是申请了1个或者多个page,然后再将这些page按固定大小分割了。small内存总共有30种固定大小的规格:8,16,24,32,40,48,56,64,80,96,112,128,… …,1792,2048,2560,3072Byte,我们把这些称为slot。这些slot的大小是有规律的:最小的slot大小为8byte,前8个slot一次递增8byte,后面每个4个递增值乘以2。

PHP7内存管理 | 机房布线规范 | 路由查询命令tracert的用法

step1:首先根据申请内存的大小在heap->free_slot中找到对应的slot规格bin_num,如果当前slot为空则首先分配对应的page,free_slot[bin_num]始终指向第一个可用的slot。

step2:如果申请内存大小对应的slot链表不为空则直接返回free_slot[bin_num]指向下一个空闲位置。

step3:释放内存时先将此内存的next_free_slot指向free_slot[bin_num],然后将free_slot[bin_num]指向释放的内存,也就是将释放的内存插到链表头部。

PHP7内存管理 | 机房布线规范 | 路由查询命令tracert的用法


一、名词解释

我们先来了解一下机房常用名词,虽然我们经常提到,却很少去了解它们的含义。

外网边界:与ISP互联的网络设备,配置40G和10G光口,10G光口通过单模光纤上联至ISP设备,另外10G光口通过多模光纤连接安全设备,40G光口通过MPO光纤下联外网核心。

内网核心:网络核心设备,框式网络设备,配置多个40G光口和10G光口等(具体按实际情况配置),40G光口通过MPO光纤下联至机房内TOR,40G光口通过MPO光纤上联至机房数据中心核心设备。

数据中心核心:网络核心设备,框式网络设备,配置多个40G光口和10G光口等(具体看配置情况),40G光口通过MOP光纤下联至内网核心,10G光口通过10G单模光纤连接传输(专用),10G光口通过10G多模光纤连接统一接入接出设备。

统一接入接出设备:类似于NAT转换设备,用于公网与私网地址之间转换,单台配备多个10G光口,10G光口通过多模光纤下联数据中心,上联外网核心;另外通过10G多模光纤连接会话同步交换机,用于不同设备间会话同步。

管理网线:六类或超六类铜缆线,RJ45接头,用于ILO接入交换机与服务器千兆网口及网络设备MGMT口之间连接。

ILO:服务器ILO接入交换机,亦称管理网接入交换机,1U的盒式网络设备,配置48个10/100/1000M自适应电口和1个1/10G光口,48个电口下联服务器千兆网口和网络设备MGMT端口;光口用10G多模光纤上联到机房管理网核心,单台ILO覆盖2个机柜的服务器和网络设备接入。

TOR交换机:内网接入交换机,1U盒式网络设备,配置48个10G光口和4个40G光口。10 G光口用AOC线缆下联服务器万兆端口,40G光口用MPO光纤上联到机房内网核心,单台TOR覆盖2个机柜的服务器接入。

10G-AOC线缆:类似于光纤的线材,两端集成了光模块,用于TOR交换机与服务器万兆网口之间连接。

机房网络拓扑图:

PHP7内存管理 | 机房布线规范 | 路由查询命令tracert的用法

二、布线规范

IDC机房布线方式应总体一致,方便日常运维。核心玩了个设备,内网接入设备,管理网络接入设备等不同角色的网络设备布线都应整齐,光纤和网线不应挡住网络设备进风口,不宜预留到机架底部太长,光纤和网线上贴的标签要清晰。网络设备正面插光纤和网线的方式应尽可能保持一致,对光纤和网线进行捆绑,网络设备背面电源线和网线整齐不杂乱,强弱电线分开,具有整体感。

1、核心设备布线规范

IDC核心网络设备,尤其是内网核心设备,因与TOR互联数量会较多,因此光纤也会较多。核心网络设备光纤布放必须整齐,不能横竖乱穿插,机柜内布线美观是网络设备布线规范中重点之一,下图为光纤布放示意图。

PHP7内存管理 | 机房布线规范 | 路由查询命令tracert的用法

PHP7内存管理 | 机房布线规范 | 路由查询命令tracert的用法

光纤从设备的左侧或者右侧垂直布放,布放的地方不能挡住网络设备进出风口。光纤每隔一段距离用魔术贴扎带进行捆绑(注:不能用白色固定扎带),但不能捆的太紧且弯曲度不能太大,100度到130度之间,通常约100度,要能松放自如,贴好标签,插到设备端口上后尽量不要将标签挡住,要留出一定长的空间方便拔插光纤。

2、内网接线规范

内网接入交换机位于机架顶端,内网TOR交换机40G的MPO光纤上联到内网核心,10G-AOC线缆下联至服务器。ILO交换机1G或者10G端口上联到管理网核心,千兆端口下联服务器,机房2个机柜一台共用一台内网TOR和1台ILO接入交换机(本机柜内用5米线缆,跨相邻机柜用8米线缆),每个机柜内大致放置18台服务器。光纤和网线布放示意图如下:

PHP7内存管理 | 机房布线规范 | 路由查询命令tracert的用法

内网接入交换机布放的线缆通过理线架整理,在理线架上每4根网线用扎带做捆绑,每一根网线上标有唯一的一个标签,另一端放到机架内托盘位置。光纤下长度无需太长,弯度不能太大,贴好标签且上联到不同核心的光纤应用尽量用不同颜色的标签区分。

3、桥架内布线规范

机房内网络设备之间互联线缆均需要经过桥架走线(单机柜内除外),桥架内光纤布放示意图如下图。

PHP7内存管理 | 机房布线规范 | 路由查询命令tracert的用法

如上图所示,桥架内光纤和网线分开整齐布放,每隔一段距离用扎带捆绑,保持美观。

4、机柜内布线规范

机柜内(普通服务器机柜)主要有内网AOC线缆和ILO管理网线线缆,另外有电源线线缆。因此单机柜内线缆数量会较多,每种线缆都需要在机柜内侧捆扎布放。如下图所示。

PHP7内存管理 | 机房布线规范 | 路由查询命令tracert的用法

PHP7内存管理 | 机房布线规范 | 路由查询命令tracert的用法

不同线缆用不同颜色的线区分,如内网线:蓝色;ILO线:灰色;电源线:黑色。预留的线缆长度不宜过长,能从一侧PDU到另一侧PDU即可,预留过长线缆会对理线造成影响。上下两天服务器之间布线及捆绑要求如下图(因网线有电磁干扰,要做到弱强电分开,电源线与网线要分开捆绑)。

PHP7内存管理 | 机房布线规范 | 路由查询命令tracert的用法

PHP7内存管理 | 机房布线规范 | 路由查询命令tracert的用法

PHP7内存管理 | 机房布线规范 | 路由查询命令tracert的用法

5、线缆标签规范

核心(内网TOR标签):因单台TOR有4条MPO线分别上联4台内网核心,因此用标签银色来区分上联到不同内网核心,如红色、黄色、蓝色、绿色分别对应内网核心1,2,3,4;标签格式统一用“机柜A~机柜B#第几根”表示,如XX机房-02-01~XX机房-01-08#1。按照习惯,机柜A为核心机柜,机柜B为非核心机柜。

特殊设备互联标签:无论是网线还是光纤等特殊网络设备之间互联布线,标签统一标注为“机房A~机房B#第几根”表示,如XX机房-02-08~XX机房-01~08#1。

内网接入交换机-服务器互联标签:正面反映内网接入交换机的机架位和端口信息,反面反映服务器的机架位信息;如正面A1-5-J-18-24-Gi1/1,反面J-18-01(其中A1-5表示机房名称,J指的是J列,18指的是18个机柜,24表示第24个托盘位置,Gi1/1指的是交换机的1/1端口。反面表示为服务器所在机架位)。

[

    注:

        (1)单个机柜48U高度,每2U空间上一台服务器,即每2U上一个托盘,从下至上依次对应关系是01、02、03、… …24等。

         (2)因单个机柜有2路PDU供电,因此将2路PDU分别取名为A路和8路,电源标签命名由字母和数字组成,数字在前字母后,数字均为两位数表示,例如,01A-24A,01B-24B。

]


一、tracert用法

在使用tracert命令之前,我们先来介绍一下它的语法。其中最简单的也是最常用的命令格式:

1、基本用户

PHP7内存管理 | 机房布线规范 | 路由查询命令tracert的用法

2、Tracert目标设备的IP地址或者网址:

实例1:检测IP地址经过几个跃点

PHP7内存管理 | 机房布线规范 | 路由查询命令tracert的用法

实例2:检测网址经过几个跃点

PHP7内存管理 | 机房布线规范 | 路由查询命令tracert的用法

实例3:“tracert -d baidu.com”代表不将IP地址解析到主机名称

PHP7内存管理 | 机房布线规范 | 路由查询命令tracert的用法

实例4:“tracert -h 3 baidu.com”代表本次tracert搜索的最大跳数,输入3表示搜索在路由器跳转3次

PHP7内存管理 | 机房布线规范 | 路由查询命令tracert的用法

这就是查跟设备最近的几个连接点的问题。通常在网络问题中,先要排除前端跟设备直接连接的最近的几个设备是否有故障,如果这几个近点跟踪可以正常互通,那么问题可能就出现在后端。

实例5:“tracert -w 6 baidu.com”代表tracert为每次回复所指定的毫秒数,其它命令根据需求,可以根据第二步图介绍使用,如下图

PHP7内存管理 | 机房布线规范 | 路由查询命令tracert的用法

当网络很慢或者很卡时,我们要检测是哪个设备的反应速度比较慢,所以这里可以设个标准值,例如上面是直接显示回复6ms以内的设备,超过6ms的设备不显示,就是反应比较慢的,这个数值可以根据情况而定。

二、tracert用法案例

tracert的作用:从你的电脑到网站,中间经过了多少个网络节点。换言之,从A地到B地需要走多少条街,进而可以知道到底是哪条路出现问题。

例如:

PHP7内存管理 | 机房布线规范 | 路由查询命令tracert的用法

未经允许不得转载:PHP100中文网 - 中国第一档PHP资源分享门户 » PHP7内存管理 | 机房布线规范 | 路由查询命令tracert的用法

赞 (0) 打赏

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏