在日常开发中,可能会遇到需要实时监控服务器运行信息,用来监控服务器运行情况,是否需要进行服务器的改配等操作。虽然服务器提供平台会有一系列监控数据,但是运营人员不可能频繁的登录控制台来查看服务器运行情况,所以需要在管理系统上展示出服务器的基本运行情况。如:CPU的占用率、内存的占用率、磁盘使用率、系统负载、运行时长等一系列信息。

获取CPU的占用情况

const getCPU = async () => {function cpuAverage() {// Initialise sum of idle and time of cores and fetch CPU infovar totalIdle = 0, totalTick = 0;var cpus = os.cpus();// Loop through CPU coresfor(var i = 0, len = cpus.length; i < len; i++) {// Select CPU corevar cpu = cpus[i];// Total up the time in the cores tickfor(const type in cpu.times) {totalTick += cpu.times[type];}     // Total up the idle time of the coretotalIdle += cpu.times.idle;}// Return the average Idle and Tick timesreturn { idle: totalIdle / cpus.length,  total: totalTick / cpus.length };}const startMeasure = cpuAverage();return new Promise((resolve) => {setTimeout(function() { // Grab second Measurevar endMeasure = cpuAverage(); // Calculate the difference in idle and total time between the measuresvar idleDifference = endMeasure.idle - startMeasure.idle;var totalDifference = endMeasure.total - startMeasure.total;// Calculate the average percentage CPU usagevar percentageCPU = 100 - ~~(100 * idleDifference / totalDifference);// Output the resultresolve({ used: percentageCPU, name: os.cpus()[0].model, threadNumber: os.cpus().length });}, 100);});
}

获取内存占用情况

在多次测试中发现Node提供的内存API所计算的内存占用数据存在较大的偏差,所以此处使用系统命令来获取相应的数据。(但是在windows与macOS上目前没有找到好的解决方案,所以此处使用Node提供的API来处理)

const getMem = async () => {return new Promise(async (resolve) => {// 初始化内存总量、空闲总量、使用总量与占用率let totalmem = 0,freemem = 0,usedmem = 0,usageRate = 0;// 判断操作系统if (os.type() === 'Linux') {// 执行系统命令,命令输出结果如下图const { stdout } = await exec('free -m');// 获取到输出数据后截取计算所需要的信息let str = stdout.split('\n')[1].split(' ').filter(item => item != '');totalmem = str[1];freemem = str[1] - str[2];usedmem = str[2];// 计算占用率usageRate = (usedmem / totalmem * 100).toFixed(2);} else {totalmem = (os.totalmem() / 1024 / 1024 / 1024).toFixed(2);freemem = (os.freemem() / 1024 / 1024 / 1024).toFixed(2);usedmem = ((os.totalmem() - os.freemem()) / 1024 / 1024 / 1024).toFixed(2);usageRate = parseInt(usedmem / totalmem * 100);}// 返回计算结果resolve({ totalmem, freemem, usedmem, usageRate });})
}

获取服务器基本信息

sys = async () => {let date = '',sys = '';// 获取系统运行时间const time = os.uptime();const day = Math.floor(time / 86400);const hour = Math.floor((time - day * 86400) / 3600);const minute = Math.floor((time - day * 86400 - hour * 3600) / 60);const second = Math.floor(time - day * 86400 - hour * 3600 - minute * 60);// 时间格式化date = formatStr('{0}天{1}时{2}分{3}秒', day, hour, minute, second);// 获取系统版本if (os.type() === 'Linux') {// 调用系统命令来获取系统的版本信息const { stdout } = await exec('cat /etc/redhat-release');sys = stdout.trim();} else if (os.type() === 'Darwin') {const { stdout } = await exec('sw_vers');stdout.split('\n').forEach(item => {sys += item.split(':')[1] ? item.split(':')[1] : '';})sys = sys.trim();} else if (os.type() === 'Windows_NT') {const { stdout } = await exec('ver');sys = stdout.trim();}// 获取系统负载const loadavg = os.loadavg();// 1分钟负载const loadavg1m = loadavg[0].toFixed(2);// 5分钟负载const loadavg5m = loadavg[1].toFixed(2);// 10分钟负载const loadavg12m = loadavg[2].toFixed(2);// 返回基本信息数据return Promise.resolve({ date, sys, loadavg1m, loadavg5m, loadavg12m });
}

获取磁盘使用情况

与内存一样,通过调用系统的命令来获取到总数据,并通过截取来获取具体值。(目前只能获取Linux(挂在盘未进行获取)系统的使用情况)

const getDisk = async () => {let total = 0,available = 0,used = 0,usageRate = 0;if (os.type() === 'Linux') {let { stdout } = await exec('df -hl /');stdout = stdout.split('\n')[1].split(' ').filter(item => item != '');total = stdout[1];available = stdout[3];used = parseFloat(stdout[1]) * (parseFloat(stdout[4]) / 100);usageRate = parseFloat(stdout[4]);}return Promise.resolve({ total, available, used, usageRate });
}

当然也有一些开源工具包可以用来获取相应的数据,笔者只是做一个记录

Node获取服务器信息相关推荐

  1. 获取服务器信息info

    <html><head><meta http-equiv="content-type" content="text/html; charse ...

  2. 网狐app端获取服务器信息,获取服务器信息 网狐客户端

    获取服务器信息 网狐客户端 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. 帐户 ...

  3. php获取服务器数据库信息,PHP获取服务器信息

    # 获取服务器信息 ## [PHP交流群:494826865(点击群号立即加群)](https://jq.qq.com/?_wv=1027&k=50Qy5h6) >[success]在做 ...

  4. asp.net获取服务器信息

    1.获取IP地址 服务端获取 //方法一 HttpContext.Current.Request.UserHostAddress; //方法二 HttpContext.Current.Request. ...

  5. 怎么获取别人服务器信息失败,获取服务器信息失败

    获取服务器信息失败 内容精选 换一换 1.若希望以主席身份入会,enter_code必须传入主席密码.若希望以来宾身份入会,当会议要求来宾密码时,enter_code必须传入来宾密码,会议不要求来宾密 ...

  6. 失落城堡手游获取服务器信息99,失落城堡手游更新情况介绍 游戏更新大全

    大家好,在最近的失落城堡的游戏中就有很多的更新,具体的更新情况和改动就让我们一起来看看吧. 落城堡手游1.1.0.20优化什么?作为活动副本,有着出色玩法.小编带来玩法详情,新版战斗来临. ios同步 ...

  7. java 获取远程服务器信息,java 远程获取服务器信息

    java 远程获取服务器信息 内容精选 换一换 已成功登录Java性能分析.待安装Guardian的服务器已开启sshd.待安装Guardian的服务器已安装JRE,JRE版本要求为Huawei JD ...

  8. python爬虫获取服务器信息,通过python自动化获取服务器信息,并写入到excel(示例代码)...

    简介这篇文章主要介绍了通过python自动化获取服务器信息,并写入到excel(示例代码)以及相关的经验技巧,文章约943字,浏览量170,点赞数4,值得参考! 博主目前在电信外包工作,比较坑,因为涉 ...

  9. 荒野行动一直在获取服务器信息,荒野行动取得服务器信息一直不动 服务器信息0处理办法...

    软件安装:手机应用宝 <荒野行动>是由网易游戏研发的一款射击求生手游,该作于2017年10月28日正式公开测试. 荒野行动获取服务器信息一直不动怎么办呢?荒野行动今天给玩家带来了全新的更新 ...

最新文章

  1. GPU加速:宽深度推理
  2. 服务器间无密码scp
  3. 160个Crackme015
  4. struts2教程(3)--请求参数处理
  5. 每一个项目都可以有一个项目blog page
  6. 值得收藏的时间复杂度速查表:数据结构操作、排序算法、图操作、堆操作
  7. pandas绘图_Pandas内置绘图方法(线型图、柱状图、密度图)
  8. vue 前台文本修改触发事件_利用VBA代码禁用触发事件及对工作薄修改的保存方案...
  9. Linux CentOs6 命令学习
  10. 设计导航网站|图片各种素材管够,资源丰富设计师懂得
  11. javascript:void(0)的作用示例
  12. oracle数据库注册服务,oracle 共享服务联接静态注册服务
  13. 安卓版LightBlue 低功耗蓝牙BLE设备调试
  14. 《1024伐木累》-小白篇之丽姐(前篇)-总章节四
  15. 趋势跟踪系统的形成历程
  16. iOS模拟器iOS Simulator详细图文使用教程
  17. DTV 学习(二) 数字视频
  18. 关于数据库、数据源、表、脚本语句的创建、连接与使用的个人学习随笔
  19. 商圈热点事件:极智嘉拟科创板上市、小鹅通D轮融资……
  20. html5霓虹效果代码,纯CSS实现酷炫的霓虹灯效果(附demo)

热门文章

  1. day03 Docker基本使用
  2. vue项目中引入阿里 iconfont 图标 动态渲染导航菜单图标
  3. [附源码]计算机毕业设计JAVAjsp图书借阅系统
  4. 企业成长能力分析-主营业务收入增长率、主营利润增长率、净利润增长率、总资产增长率、固定资产增长率...
  5. OpenCV中的图像处理 —— 傅里叶变换+模板匹配
  6. 2023蓝桥杯学习与刷题建议
  7. vs qt 无法打开包括文件: “QtCore/qconfig.h”
  8. 自由天空综合驱动包集合
  9. c920摄像头驱动 linux,4G模块驱动 - PanGuBoard - 湃兔核i2SOM
  10. ibm服务器raid扩硬盘,IBM x系列服务器RAID卡介绍及配置阵列