tag 标签: 服务器

相关帖子
相关博文
  • 热度 1
    2025-1-24 16:58
    259 次阅读|
    0 个评论
    前篇文章中 『服务器散热效能不佳有解吗?』 提到气冷式的服务器其散热效能对于系统稳定度是非常重要的关键因素,同时也说明了百佳泰对于散热效能能提供的协助与服务。 本篇将为您延伸说明我们如何进行评估,同时也会举例在测试过程中发现的问题及改善后的数据。 AI服务器的散热架构三大重点: GPU导风罩:尝试不同的GPU导风罩架构,用以集中服务器进风量,加强对GPU的降温效果。 GPU托盘:改动GPU托盘架构,验证出风面积大小对GPU散热的影想程度。 CPU导风罩:尝试封闭CPU导风罩间隙,集中风流,验证CPU降温效果。 我们会先与您讨论现况,并实际确认散热架构后,将开始进行温度监控的热电偶布点,完成布点后,开始执行加压程序及温度数据的收集。加压过程中会有不同部件的加压(ex. GPU or CUP)及加压的程度 (ex. 30%~100%),同时也会尝试对风扇的转速控制或制造风扇的故障来模拟各种情境以收集相关的数据做分析,以确保服务器在遇到突发状况时仍能够保持散热的稳定性。 百佳泰针对此项目尝试了两个散热架构的数据收集,经过分析后确认散热架构1的表现较符合预期,测试结果如下图: 在数据收集的过程中,我们也发现了一个异常的现象,在收集PSU布点的电热偶数据中发现:温度的曲线并非是越靠近中心温度越高,有两个点呈现相反的状态。经过分析、与客户讨论后找出其实际原因是因为热风回流所导致,而发生的地方就是在PSU附近的机壳侧面或缝隙。数据数据及过程如下: 改善前PSU温度异常 : 靠近核心的Temperature_2温度 竟低于 外侧温度 Temperature→ 可能的原因为机构设计导致积热/热回流等散热问题 改善后系统PSU温度正常 : PSU核心Temperature_3温度 靠近核心的Temperature_2温度 外侧温度Temperature_1 百佳泰对于服务器散热架构的评估服务有丰富的经验及相关的能力,能够协助客户尽速完成各种架构的评估及最终方案的选定。同时,百佳泰亦建置下列各种不同热负载的Walk-in Chamber,能满足各类型的服务器进行散热架构评估。 13KW Walk-in Chamber Temperature Range: -20 ℃ ~ 80 ℃ 20KW Walk-in Chamber Temperature Range: -40 ℃ ~ 150 ℃ 65KW Walk-in Chamber Temperature Range: -40 ℃ ~ 90 ℃
  • 2025-1-10 17:21
    165 次阅读|
    0 个评论
    【哔哥哔特导读】英伟达GB200 NVL4高功耗芯片亮相,超算散热革新加速。UQD快速接头作为液冷关键部件,于变局中登场,迎来机遇曙光。 在 2024 年美国超级计算大会(SC24)这场备受全球关注的科技盛会中,英伟达推出了全新的硬件产品——GB200 NVL4超级芯片。该芯片展现出了较为出色的性能表现,在业界引起了广泛关注,并预计于2025年下半年正式进入市场。 ▲英伟达GB200 NVL4超级芯片 回溯至 2024 年 3 月,GB200 NVL4的初次亮相便成为了高速铜缆发展的关键驱动力,开启了技术联动的新篇章。如今,人工智能大模型呈爆发式发展,推动芯片产品加速更新迭代。 由于GB200 NVL4芯片性能提升与功耗增长并存,相关的散热问题成为一个显著的挑战。在高速铜缆发展之后,液冷散热解决方案具备成为市场新机遇的可能性,其发展态势值得进一步关注和研究。 4颗GPU,2颗CPU 性能更强!但功耗也不“拉下” 英伟达新推出的GB200 NVL4 模块引起了广泛关注。它基于原有的 GB200 Grace Blackwell Superchip AI 解决方案,进行了较为显著的扩展与优化,为高性能计算和人工智能相关工作负载的处理带来了新的可能性。 GB200 NVL4 被设计成一种单服务器解决方案,集成了两个 Grace CPU 和四个 Blackwell B200 GPU,并配备 4 - GPU NVLINK 域以及 1.3T 相干内存。 具体来看,GB200 NVL4四个 Blackwell B200 GPU 配置了 768GB 的 HBM3E 内存,能够提供 32TB/s 的组合内存带宽;GB200 NVL4两个 Grace CPU 则具备 960GB 的 LPDDR5X 内存。GB200 NVL4这样的内存配置组合,为应对具有一定复杂性和高强度的高性能计算以及 AI 工作负载提供了较为有力的支持。 从架构方面而言,GB200 NVL4 所采用的 Blackwell 架构进一步提升 GPU 的利用率和扩展性,在一定程度上优化了计算资源的分配和利用效率。此外,借助 NVLink 实现的高带宽 GPU 通信机制,提升整体的计算效率和任务执行的流畅性。 在性能表现上,GB200 NVL4 相比前代 GH200 NVL4 超级芯片,模拟性能有较为明显的提升。GB200 NVL4达到了约 2.2 倍的提升幅度,训练性能和推理性能也分别提升了约 1.8 倍。 然而,需要注意的是,性能提升的同时伴随着功耗的增加。GB200 NVL4 的功耗达到 5400W,大约是 GB200 NVL2 型号功耗的两倍。 GB200 NVL4如此高的功耗水平,意味着需要采用适当的散热解决方案,以保证模块在长期运行过程中能够维持稳定的温度,避免因过热而导致性能下降或故障等问题。英伟达自 B100 起就采用液冷散热技术,GB200 NVL72 机架也配备了液冷系统,这体现了行业在散热技术方面的一种趋势。 据媒体消息,GB200 NVL4 预计将被应用于配有定制液冷系统的服务器机架中,以保障该模块在运行时能够维持在适宜的工作温度范围内。 UQD 快速接头 液冷系统的关键支撑 当下,随着芯片性能的持续提升,功耗也在不断增加,这促使数据中心和服务器对散热技术提出了更高要求,液冷技术因此得到大规模应用,市场前景广阔。 据Data Bridge Market Research 分析,2022 年数据中心液体冷却市场规模达到 22.6 亿美元,预计到 2030 年将大幅增长至 134.5 亿美元,在 2023 年至 2030 年的预测期内,复合年增长率可达 24.96%。 然而,液冷在实际应用中,漏水问题一直是最为关键的隐患,而接头部位更是漏水的高发区域。在这种情况下,UQD 快接头凭借无泄漏、高流量、低流阻、热插拔等优势,成为保障数据中心高效运行与维护的关键组件。 UQD快接头标准是一种专门针对数据中心液冷应用的开放标准防喷快换接头,由英特尔发起倡议,并在 OCP(开源计算项目)框架下进行开发。 依据Mark Sprenger, Intel Corporation发布的通用快速断开(UQD)规范修订版 1.0,UQD 快接头具有特定的物理特性,且包含02/04/06/08 四种尺寸,同时明确了流量等级、温度额定值、压力等级、爆破压力额定值、断开时液体损失、流量系数为UQD快接头的关键指标,以确保其性能满足数据中心液冷系统的严格要求。 在规范中,UQD快速接头具体性能要求包括: l 尽可能降低手动插接连接器的耦合与解耦力; l 具备 5 年保质期和 10 年使用寿命; l 插槽须能承受 5000 次接通和断开循环; l 在 0 psi 条件下,不同尺寸的每个耦合 / 分离循环的最大流体损失需控制在一定范围内;并且在不同尺寸下,流速、压力和温度均要符合相应要求。 目前,UQD快接头市场主要由欧美企业占据主导地位。在国内,也有部分企业积极布局,例如强瑞技术的快速密封接头产品已配套公司的液冷测试治具及设备,并成功交付客户使用;英维克的 UQD快接头不仅满足英特尔的标识与端接要求,还通过了相关测试和互换性验证;中航光电的 UQD 系列直推式流体连接器采用直推式锁紧结构与平面密封结构,展现出良好的密封性能。 ▲用于数据中心机架服务器与分水器之间、分水器与管道系统之间连接的UQD系列直推式流体连接器能够实现快速锁紧与分离。图/中航光电官网 随着液冷技术在各领域的进一步深入应用,UQD 快速接头的市场需求呈现出不断增长的趋势。2024年7月,Digtimes报道,英伟达液冷 AI 服务器因UQD 供货紧张,导致出货受阻。 而TrendForce集邦咨询最新研究显示下半年英伟达新一代Blackwell GB200服务器也将于第三季度进入量产出货阶段。预期GB200及B100等产品将于今年第四季度至2025年第一季度正式放量。UQD 快速接头的需求有望进一步扩大,其市场潜力值得关注。 小结 随着芯片性能提升、功耗增加,液冷技术应用规模日益扩大,市场前景广阔。而在液冷技术应用中,UQD 快速接头扮演着关键角色。 展望未来,随着数据中心向更高性能、更大规模迈进,人工智能应用场景不断拓展,UQD 快速接头将迎来更为广阔的天地,其市场潜力仿若一座亟待挖掘的宝藏,值得全球科技从业者与投资者密切关注。 本文为哔哥哔特资讯原创文章,未经允许和授权,不得转载
  • 2024-12-26 16:33
    222 次阅读|
    0 个评论
    今年AI技术的话题不断,随着相关应用服务的陆续推出,AI的趋势已经是一个明确的趋势及方向,这也连带使得AI服务器的出货量开始加速成长。AI服务器因为有着极高的运算效能,伴随而来的即是大量的热能产生,因此散热效能便成为一个格外重要的议题。其实不只AI服务器有着散热的问题,随着Intel及AMD 的CPU规格也不断地在提升,非AI应用的服务器的散热问题也是不容小觑的潜在问题。即便如此,由于目前的液冷技术仍有许多待克服的地方,例如像是建置成本昂贵,机壳、轨道、水路、数据中心等项目都得重新设计来过,维修人员也得需要时间重新训练。因此目前市面上出货的服务器大多数还是以气冷式为主。 图片出处:双鸿、富果研究部 如何有效改善服务器散热效能 气冷式的散热架构及散热料件将决定服务器的散热效能。当散热效能不够好时,服务器的温度将会持续升高,若此时机房的冷气无法有效地降低温度时,将会导致服务器因温度过高而启动保护措施,包括降速或强制关机。当保护措施启动时,对外的影响就是应用服务效能降低,使用者感觉回应变慢,甚至是因强制关机而导致的服务中断等等,这些都会造成使用者的负面体验。 ALLION 散热解决方案流程 实际案例 举一个项目的例子来说,百佳泰协助该厂商更换不同的散热料件,并将收集到的数据整理后提供给厂商,厂商即可透过百佳泰所提供的测试数据,选择出最佳搭配的散热模块。收集不同散热材料的数据,CPU最高的温差可达5度,厂商由此可得知不同料件,对散热效能影响的差异。 图说:藉由不同散热材料的数据进行比较分析后得知,CPU最高的温差最高可达5度。协助厂商准确掌握不同料件,对散热效能影响的个别差异为何。 或者像下图这个项目,经过散热架构的选定、微调以及散热材料的选择后,百佳泰成功将将整体服务器的温度下降约9.3°C,达到厂商要求的标准。 气冷式散热架构与散热料件直接关乎服务器散热效能,关乎应用服务能否稳定运行,影响着使用者体验。而百佳泰通过更换散热料件、收集分析数据,助力厂商精准把握散热效能差异,还能针对性优化散热架构与材料,让服务器温度显著下降,为应对服务器散热挑战提供了有效范例与实操方案。
  • 热度 6
    2024-12-12 17:45
    739 次阅读|
    1 个评论
    服务器系统太复杂?!系统整合测试(SIT)助您轻松应对
    应用环境与极具挑战性的测试需求 在服务器制造领域里,系统整合测试(System Integration Test;SIT)是确保产品质量和性能的关键步骤。随着服务器系统的复杂性不断提升,包括:多种硬件组件、操作系统、虚拟化平台以及各种应用程序和服务的整合,服务器制造商面临着更有挑战性的测试需求。 这些挑战主要体现在以下五个方面: 1. 硬件和软件的高度整合: 现代服务器通常包括多个处理器、内存模块、储存设备和网络接口。这些硬件组件必须与操作系统及应用软件无缝整合。SIT测试可以帮助制造商确保这些不同组件能够协同工作,且在整合后不会产生兼容性问题或性能瓶颈。 2. 性能和稳定性的要求: 服务器系统需要在高负载下保持稳定运行,尤其是在关键业务和大型数据中心中。SIT测试能够全面检查服务器在实际工作负载下的效能表现和系统稳定性,确保服务器能够达到预期的性能指针,并且在各种操作条件下可靠运行。 3. 客制化需求的增长: 随着市场对专业化服务器需求的增长,制造商时常需要根据客户需求进行客制化设计和配置。SIT测试能够帮助制造商验证这些客制化配置的正确性和有效性,确保每一台服务器都能够满足特定应用场景的要求。 4. 技术快速变迁: 服务器技术日新月异,新一代的处理器、内存和储存技术不断推出。SIT测试帮助制造商在新技术整合过程中及早识别和解决问题,确保新技术能够顺利整合并保持系统的整体性能和稳定性。 5. 市场竞争的压力: 服务器市场竞争激烈,产品的质量和可靠性直接影响市占率。通过高效的SIT测试,制造商能够及早发现并修正系统中的缺陷,提高产品质量,从而提升市场竞争力和客户满意度。 对服务器制造商而言,SIT测试不仅是保证产品质量和性能的必要手段,更是应对技术挑战和市场需求的重要保障。随着服务器系统的日益复杂化和客户需求的多样化,SIT测试的作用将变得更加关键。 一家国内知名的服务器ODM厂商(Original Design Manufacturer)在市场需求急剧增长的情况下,面临到急需解决的问题和挑战。为确保产品的质量和稳定性,因而寻求与百佳泰合作。 1. 系统复杂性提升 随着服务器技术的快速发展和系统设计的日益复杂化,服务器ODM厂商面临着更多元的硬件和软件的整合挑战,确保服务器能够满足不同应用场景的需求。这要求全面且精确的SIT测试来确保每个系统组件除了基本功能外,要能够在各种应用场景达成整体性能和稳定性,这使得厂商自我测试的难度大幅提升。 2. 测试效率与资源压力 SIT测试过程繁琐且需耗费大量人力和资源。市场需求大幅增加,服务器ODM厂商需要在有限的时间和资源内完成大量的测试工作。寻找合适的合作伙伴一同协助提升测试效率和降低测试成本,已成为当前的迫切需求。 3. 版本控制与更新频繁 服务器系统的版本更新频繁,每次更新都需要进行相应的SIT回归(Regression)测试,以确保新版本的系统在整合后仍能正常运行。这要求SIT测试迅速而有效的发现和解决因版本更新引发的问题,客户内部难以消化频繁的更新需求,除了可能影响产品的出货时间甚至在更新上线后才发现问题。 4. 提升系统质量与稳定性 SIT测试在发现和修复系统整合问题方面扮演着关键角色。通过高效的SIT测试,服务器ODM厂商能够确保产品的整体质量,提升系统性能,降低后期维护成本,并增强市场竞争力。 5. 技术进步与自动化需求提升 随着技术的不断进步,SIT测试趋势将会引入更多AI自动化测试方案。这些技术的应用进一步提高SIT测试的效率和准确性。因此,这家客户希望与专业的测试合作伙伴合作,一起发展先进的测试技术来应对未来的挑战。 总结来说,客户在面对市场需求快速成长的同时,必须解决『系统复杂性、测试效率、版本控制和技术进步』等挑战。寻求专业的SIT合作伙伴将是其提升产品质量、降低维护成本、加快市场反应速度和增强竞争力的关键。
  • 热度 3
    2024-10-31 16:16
    361 次阅读|
    0 个评论
    前言 当我们需要获取linux服务器的状态时,比如APP要获取服务器状态、网页要显示服务器状态,那么我们就可以用exec函数来命令linux,然后读取linux的数据,但是exec函数在PHP中都是推荐禁用的,因为exec函数可能会被注入恶意命令,从而导致服务器被攻击、数据泄露等安全问题。 所以本文不推荐使用exec函数,我们可以通过读取系统文件,来获取状态。 在Linux系统中,/proc目录是一个非常重要的特殊目录,它实际上是一个虚拟文件系统(proc文件系统),提供了对内核和系统进程信息的实时访问。 源码免费下载:https://mbb.eet-china.com/download/316368.html proc目录介绍 /proc目录中的数据并不占用磁盘空间,而是由内核动态生成的,内容实时反映了系统和进程的当前状态。 这个目录为用户和管理员提供了一个方便的接口,以监控和管理系统的状态。 (一)系统信息 ①/proc/cpuinfo:提供有关CPU的信息,包括型号、核心数量、频率 ②/proc/meminfo:显示有关内存使用情况的信息,包括总内存、可用内存、缓存 ③/proc/version:显示当前运行的Linux内核版本和编译信息 ④/proc/devices:列出所有已注册的设备及其驱动程序 ⑤/proc/partitions:显示磁盘分区的信息 ⑥/proc/stat: 系统性能的统计信息,如 CPU 使用情况、中断数量、上下文切换次数 (二)网络信息 ①/proc/net/:包含网络相关的信息,如网络连接、路由表、网络接口统计 ②/proc/net/tcp:显示TCP连接的信息 ③/proc/net/udp:显示UDP连接的信息 编写PHP接口 (一)内存信息/proc/meminfo ①我们先看一下文件的内容,发现由两部分组成,一部分是标签,另一部分就是标签对应的数值 所以思路就是将所需标签的数值提取出来就可以了 需要提取:总内存MemTotal、未使用内存MemFree、缓冲区内存Buffers、缓存Cached 可用内存 =未使用内存MemFree +缓冲区内存Buffers +缓存Cached 已用内存 = 总内存 - 可用内存 使用率 = (已用内存/总内存)* 100 ②代码展示 function getMemoryInfo ( ) { // 读取 /proc/meminfo 文件内容 $meminfo = file ( '/proc/meminfo' ); $freeMemory = 0 ; $availableMemory = 0 ; $totalMemory = 0 ; foreach ( $meminfo as $line ) { if ( strpos ( $line , 'MemTotal:' ) === 0 ) { // 获取总内存(MemTotal) list (, $memTotalKb ) = explode ( ':' , trim ( $line )); $totalMemory = ( int ) $memTotalKb * 1024 ; // 转换为字节 } elseif ( strpos ( $line , 'MemFree:' ) === 0 ) { // 获取完全没有被使用的内存(MemFree) list (, $memFreeKb ) = explode ( ':' , trim ( $line )); $freeMemory = ( int ) $memFreeKb * 1024 ; // 转换为字节 } elseif ( strpos ( $line , 'Buffers:' ) === 0 ) { // 获取被用作缓冲区的内存(Buffers) list (, $buffersKb ) = explode ( ':' , trim ( $line )); $buffersMemory = ( int ) $buffersKb * 1024 ; // 转换为字节 } elseif ( strpos ( $line , 'Cached:' ) === 0 ) { // 获取被用作缓存的内存(Cached) list (, $cachedKb ) = explode ( ':' , trim ( $line )); $cachedMemory = ( int ) $cachedKb * 1024 ; // 转换为字节 } } // 可用内存 = MemFree + Buffers + Cached $availableMemory = $freeMemory + $buffersMemory + $cachedMemory ; // 计算内存使用率(百分比) $usedMemory = $totalMemory - $availableMemory ; $memoryUsagePercent = ( $usedMemory / $totalMemory ) * 100 ; // 获取内存信息 $memoryInfo = getMemoryInfo (); // 打印空闲内存、可用内存、总内存和内存使用率(以MB为单位和百分比表示) echo "Free Memory: " . number_format ( $memoryInfo / ( 1024 * 1024 ), 2 , '.' , '' ) . " MB\n" ; echo "Available Memory: " . number_format ( $memoryInfo / ( 1024 * 1024 ), 2 , '.' , '' ) . " MB\n" ; echo "Total Memory: " . number_format ( $memoryInfo / ( 1024 * 1024 ), 2 , '.' , '' ) . " MB\n" ; echo "Memory Usage: " . number_format ( $memoryInfo , 2 , '.' , '' ) . " %\n" ; ③代码解析 foreach ( $meminfo as $line ) 使用foreach循环遍历$meminfo数组中的每一行。$line为当前的行 strpos ( $line , 'MemTotal:' ) === 0 strpos函数用于查找字符串在另一个字符串中首次出现的位置:strpos($line, 'MemTotal:') === 0,MemTotal在$line中首次出现 list (, $memTotalKb ) = explode ( ':' , trim ( $line )); trim($line);用于将$line首位的空白去掉 explode(':', trim($line));explode将处理后的line从冒号":"开始分割,分成数组 去空白:MemTotal: 16384256 kB 分割成数组: list(, $cachedKb);读取数组的信息,第一位是空字符,即忽略MemTotal,从第二位获取,则16384256 kB $cachedMemory = (int)$cachedKb * 1024; // 转换为字节 ,转不转都可以 return ; 返回函数,后续使用时,$memoryInfo = getMemoryInfo(); 调用$memoryInfo ,简洁明了 number_format ( $memoryInfo / ( 1024 * 1024 ), 2 , '.' , '' ) 由于我取值时转为了字节,所以字节转到MB时,要计算,要让字节/1024*1024 然后取值2位小数,小数标点符号位“.”,不使用千位分隔符 (二)网络信息/proc/net/dev ①观察文件,前两行都为无效内容,所以在遍历的时候要忽略前两行,我们需要的数据为lo和wlan0两行的接收、发送数据 用一秒后的数据,减去一秒前的数据,就可以得到1秒数据大小 ②代码展示 // 函数:获取所有网络接口的流量信息 function getAllNetworkTraffic ( ) { // 读取 /proc/net/dev 文件的内容 $stats = file ( '/proc/net/dev' ); $totalTraffic = ; // 遍历每一行,除了前两行(标题和汇总行) foreach ( $stats as $lineNum $line ) { // 跳过前两行 if ( $lineNum < 2 ) { continue ; } // 使用正则表达式匹配网络接口的行并提取接收和发送的字节数 if ( preg_match ( '/^\s*(\S+):\s+(\d+)\s+(\d+)/' , $line , $matches )) { $interface = $matches ; // 网络接口名称(可能包含冒号和数字,如 eth0:0) $receiveBytes = intval ( $matches ); $transmitBytes = intval ( $matches ); // 累积接收和发送的字节数 //因为要获取前1秒的数据 $totalTraffic += $receiveBytes ; $totalTraffic += $transmitBytes ; } } // 返回总流量信息 return $totalTraffic ; } // 获取初始的所有网络接口流量信息 $prevTotalTraffic = getAllNetworkTraffic (); // 等待一秒钟 sleep ( 1 ); // 获取当前的所有网络接口流量信息 $currTotalTraffic = getAllNetworkTraffic (); // 检查是否成功获取了流量信息 if ( $prevTotalTraffic && $currTotalTraffic ) { // 计算接收和发送的字节差异 $totalReceiveDiff = $currTotalTraffic - $prevTotalTraffic ; $totalTransmitDiff = $currTotalTraffic - $prevTotalTraffic ; // 将字节差异转换为 KB/s(千字节每秒),注意这里应该是 KBps 而不是 Kbps(因为 Kbps 通常指千比特每秒) $totalReceiveSpeedKBps = $totalReceiveDiff / 1024 ; $totalTransmitSpeedKBps = $totalTransmitDiff / 1024 ; // 输出结果 //echo "所有接口综合下行流量(接收): " . number_format($totalReceiveSpeedKBps, 2, '.', '') . " KB/s\n"; // echo "所有接口综合上行流量(发送): " . number_format($totalTransmitSpeedKBps, 2, '.', '') . " KB/s\n"; } else { // 如果无法获取流量信息,则输出错误信息 echo "无法获取所有网络接口的流量信息。\n" ; } ③代码解析 用foreach遍历同上,要注意的是,直接跳过前两行的遍历,从第三行开始 ( preg_match ( '/^\s*(\S+):\s+(\d+)\s+(\d+)/' , $line , $matches )) { $interface = $matches ; // 网络接口名称(可能包含冒号和数字,如 eth0:0) $receiveBytes = intval ( $matches ); $transmitBytes = intval ( $matches ); 正则如上图所示 ^\s*:匹配行首的任意数量的空白字符(空格、制表符等) (\S+):匹配一个或多个非空白字符,这通常代表网络接口的名称(可能包含冒号和数字,如eth0:0)。这个匹配项被捕获到$matches 中 :\s+:匹配一个冒号后跟任意数量的空白字符 (\d+):匹配一个或多个数字,这代表接收的字节数。这个匹配项被捕获到$matches 中 \s+(\d+):再次匹配任意数量的空白字符后跟一个或多个数字,这代表发送的字节数。这个匹配项被捕获到$matches 中 $totalTraffic += $receiveBytes ; $totalTraffic += $transmitBytes ; 将遍历的结果累计到变量 // 获取初始的所有网络接口流量信息 $prevTotalTraffic = getAllNetworkTraffic (); // 等待一秒钟 sleep ( 1 ); // 获取当前的所有网络接口流量信息 $currTotalTraffic = getAllNetworkTraffic (); 当前的流量 - 1秒前的流量 = 1秒内的流量 (三)硬盘信息 查询硬盘信息要关闭防跨站攻击 ①硬盘就简单很多,只需要获取根目录已经用的内存,和总内存,内存的使用率 ②代码展示 $directory = '/' ; // 获取总磁盘空间和可用磁盘空间 $totalSpace = disk_total_space ( $directory ); $freeSpace = disk_free_space ( $directory ); $totalSpaceGB = $totalSpace / ( 1024 * 1024 * 1024 ); // 或者使用 1073741824,但这种方式更清晰 $freeSpaceGB = $freeSpace / ( 1024 * 1024 * 1024 ); // 计算已用空间 $usedSpace = $totalSpace - $freeSpace ; $usedSpaceGB = $totalSpaceGB - $freeSpaceGB ; // 计算使用率(百分比) $usagePercentage = ( $usedSpace / $totalSpace ) * 100 ; ③代码解析 disk_total_space函数:获取目录所在磁盘的总空间(以字节为单位) disk_free_space函数:获取可用空间(同样以字节为单位) 将字节转换成GB,在字节上除以1024*1024*1024 (四)CPU使用率 ①CPU使用率比较复杂,但是也和上面的差不多,也是正则匹配问题 ②代码展示 function getCpuInfo ( ) { $stats = file ( '/proc/stat' ); $cpuInfo = ; if ( $cpu == '' ) { $cpu = 'total' ; } $values = preg_split ( '/\s+/' , $matches , - 1 , PREG_SPLIT_NO_EMPTY); $cpuInfo = array_map ( 'intval' , $values ); } } return $cpuInfo ; } function calculateCpuUsage ( $prev , $curr ) { $prevIdle = $prev + $prev ; // idle + iowait (Linux 2.5.41+) $currIdle = $curr + $curr ; $prevNonIdle = array_sum ( $prev ) - $prevIdle ; $currNonIdle = array_sum ( $curr ) - $currIdle ; $prevTotal = array_sum ( $prev ); $currTotal = array_sum ( $curr ); $totalDiff = $currTotal - $prevTotal ; $idleDiff = $currIdle - $prevIdle ; $cpuUsage = 100 * (( $totalDiff - $idleDiff ) / $totalDiff ); return $cpuUsage ; } // 获取初始 CPU 信息 $prevCpuInfo = getCpuInfo (); // 等待一秒(可以根据需要调整时间间隔) sleep ( 1 ); // 获取当前 CPU 信息 $currCpuInfo = getCpuInfo (); // 计算 CPU 使用率 $cpuUsage = calculateCpuUsage ( $prevCpuInfo , $currCpuInfo ); //echo "CPU Usage: " . number_format($cpuUsage, 2, '.', '') . "%\n"; ③代码讲解 使用 file('/proc/stat') 读取文件内容,每行作为数组的一个元素 遍历每行,使用正则表达式 '^cpu(\d*)\s+(.+)' 匹配 CPU 统计信息 cpu(\d*) 匹配 CPU 编号,如 cpu0, cpu1 等,没有编号的即为总体 CPU 信息(cpu) \s+(.+) 匹配该 CPU 的统计值,这些值之间用空格分隔 如果匹配成功,$cpu 变量存储 CPU 编号(或 total),$values 数组存储解析出的统计值(如用户态时间、系统态时间、空闲时间等),并将这些值转换为整数存储到 $cpuInfo 数组中。 计算空闲时间(idle)和 I/O 等待时间(iowait)的总和,这两个时间值分别位于 $prev 和 $curr 数组的索引 3 和 4 计算非空闲时间(non-idle),即总时间减去空闲时间 计算总时间的差值(totalDiff)和空闲时间的差值(idleDiff) CPU 使用率计算公式为:100 * (($totalDiff - $idleDiff) / $totalDiff) 执行流程: 调用 getCpuInfo 函数获取初始 CPU 信息($prevCpuInfo) 等待一秒(sleep(1)),以获取足够的时间间隔来观察 CPU 使用情况的变化 再次调用 getCpuInfo 函数获取当前 CPU 信息($currCpuInfo) 调用 calculateCpuUsage 函数计算 CPU 使用率
相关资源