<dependency> <groupId>org.fusesource</groupId> <artifactId>sigar</artifactId> <version>1.6.4</version> </dependency>
1、首先是Sigar中提供的DLL如何加载,可以通过设置其为CLASSPATH后,我们还可以通过程序来把只需要的DLL复制到默认的CLASSPATH路径下。
首先是通过参数的判断,是加载那种DLL,下面给出加载DLL的函数:
private static Logger logger = Logger.getLogger(ListenerMain.class); public static void main(String[] args) throws SigarException { try { logger.debug(System.getProperty("java.library.path")); InputStream inputStream = new FileInputStream("../config/log4j.properties"); PropertyConfigurator.configure(inputStream); if (null == args) { logger.error("请输入系统架构,例如Window 32位,则输入win32,win64,如果是Linux,则输入linux32,linux,目前只支持这2个系统"); return; } // String sys = args[0]; String sys = "win32"; if (null != args && args.length > 0) { sys = args[0]; } String dllPath = ""; String dllName = ""; if ("win32".equals(sys)) { dllPath = "/dll/sigar-x86-winnt.dll"; dllName = "sigar-x86-winnt.dll"; } else if ("win64".equals(sys)) { dllPath = "/dll/sigar-amd64-winnt.dll"; dllName = "sigar-amd64-winnt.dll"; } else if ("linux32".equals(sys)) { dllPath = "/dll/libsigar-x86-linux.so"; dllName = "libsigar-x86-linux.so"; } else if (("linux64").equals(sys)) { dllPath = "/dll/libsigar-amd64-linux.so"; dllName = "libsigar-amd64-linux.so"; } if (dllPath.equals("")) { logger.error("输入的系统架构信息不正确,请重新输入"); return; } //设置DLL setLibrary(dllPath,dllName); } catch (Exception e) { } } private static void setLibrary(String dllPath,String dllName) { try { // 获取到java.library.path String libpath = System.getProperty("java.library.path"); if (libpath == null || libpath.length() == 0) { throw new RuntimeException("java.library.path is null"); } String path = null; StringTokenizer st = new StringTokenizer(libpath, System.getProperty("path.separator")); if (st.hasMoreElements()) { path = st.nextToken(); } else { throw new RuntimeException("can not split library path:" + libpath); } // 把dll文件写入到java.library.path中该dll放在ConvertWord2HM相同目录下,这个可以是你的类名 InputStream inputStream = ListenerMain.class.getResource(dllPath).openStream(); final File dllFile = new File(new File(path), dllName); if (!dllFile.exists()) { FileOutputStream outputStream = new FileOutputStream(dllFile); byte[] array = new byte[8192]; int bytesRead = -1; while ((bytesRead = inputStream.read(array) )!= -1) { outputStream.write(array, 0, bytesRead); } outputStream.flush(); outputStream.close(); } // 动态加载dll System.load(dllFile.getPath()); // 在虚拟机关闭的时候删除dll // dllFile.deleteOnExit(); } catch (Throwable e) { logger.error("load dll error", e); } }
2、获取服务CPU、内存、硬盘的占用率
public double getDeviceCpuValue() throws SigarException { double combined = 0f; Sigar sigar = new Sigar(); // 方式二,不管是单块CPU还是多CPU都适用 CpuPerc cpuList[] = null; cpuList = sigar.getCpuPercList(); for (int i = 0; i < cpuList.length; i++) { combined = combined + cpuList[i].getCombined(); } logger.debug("device cpu = " + combined); return combined / cpuList.length; }
public float getDeviceMemValue() throws SigarException { // a)物理内存信息 Sigar sigar = new Sigar(); Mem mem; mem = sigar.getMem(); return (float)mem.getUsed() / (float)mem.getTotal(); }
public float getDeviceHdValue() throws SigarException { float hdValue = 0f; Sigar sigar = new Sigar(); FileSystem fslist[] = sigar.getFileSystemList(); float total = 0f; float used = 0f; for (int i = 0; i < fslist.length; i++) { FileSystem fs = fslist[i]; FileSystemUsage usage = null; try { usage = sigar.getFileSystemUsage(fs.getDirName()); } catch (SigarException e) { if (fs.getType() == 2) { throw e; } continue; } switch (fs.getType()) { case 0: // TYPE_UNKNOWN :未知 break; case 1: // TYPE_NONE break; case 2: // TYPE_LOCAL_DISK : 本地硬盘 // 文件系统总大小 total = total + usage.getTotal(); used = used + usage.getUsed(); break; case 3:// TYPE_NETWORK :网络 break; case 4:// TYPE_RAM_DISK :闪存 break; case 5:// TYPE_CDROM :光驱 break; case 6:// TYPE_SWAP :页面交换 break; } } hdValue = used / total; return hdValue; }
3、Sigar不能正确获取某个进程的占用率,只能通过Shell脚本来实现,但是可以获取某个进程内存的使用率:
float memValue = (float)procMem.getResident() / (float)sigar.getMem().getTotal();
4、如何判断网卡是否正常使用,在Sigar并没有提供这样的方法,但是通过判断是否存在正常的IP,则说明
该网卡是否正常使用。
public Map<String, String> getNeWorkCards() throws SigarException { Sigar sigar = null; sigar = new Sigar(); String[] ifaces = sigar.getNetInterfaceList(); Map<String, String> map = new HashMap<String, String>(); for (int i = 0; i < ifaces.length; i++) { NetInterfaceConfig cfg = sigar.getNetInterfaceConfig(ifaces[i]); if (NetFlags.LOOPBACK_ADDRESS.equals(cfg.getAddress()) || NetFlags.LOOPBACK_ADDRESS_V6.equals(cfg.getAddress())) { continue; } if ((NetFlags.ANY_ADDR.equals(cfg.getAddress()) && NetFlags.ANY_ADDR.equals(cfg.getBroadcast())) || (NetFlags.ANY_ADDR_V6.equals(cfg.getAddress()) && NetFlags.ANY_ADDR_V6.equals(cfg.getBroadcast()))) { map.put(ifaces[i], AlarmContants.ABNORMAL + ""); } else { map.put(ifaces[i], AlarmContants.NORMAL + ""); } } return map; }
5、在Window及Linux上,Sigar得到一些信息还是有很大区别的,一般来说,Window得到的信息更全些,
而Linux相对比较少,这就需要我们自己编写Shell脚本去获取一些需要的信息了。
6、Sigar不能获取硬件的信息
相关推荐
请注意,教程中的内容、图片和示例都是基于特定版本的SugarCRM,用户在使用过程中应结合实际版本进行操作。教程的版权信息显示,未经出版商或版权所有者的明确许可,不得随意复制、存储或传输教程内容。如果读者需要...
**Sugar ORM** 是一款针对Android平台的...总之,Sugar ORM为Android开发提供了便利的数据持久化解决方案,让开发者能更高效地处理数据库操作,降低项目复杂性。然而,选择ORM框架应根据项目的具体需求和规模进行权衡。
4. **性能优化**:在处理大量数据或复杂视图时,注意性能优化,避免因动画导致的应用卡顿。 通过以上步骤,我们可以使用MotionLayout成功地实现类似高德地图的bottomSheet效果。在实际开发中,根据项目的具体需求,...
【SugarCRM 5.5 知识点详解】 SugarCRM 是一款开源的客户关系管理(CRM)系统,它帮助企业管理和优化与客户的互动,提高销售效率,提升客户服务质量和团队协作。5.5 版本是 SugarCRM 的一个重要里程碑,提供了一...
糖电子基于Electorn的轻量级开发框架简体中文|安装npm i sugar-electron --save-dev脚手架npm i sugar-electron-cli -gsugar-electron-cli init注意事项sugar-electron渲染进程依赖node模块,所以nodeIntegration,...
值得注意的是,Diana框架的源代码完全开放,附带完整的授权,开发者可以放心用于自己的产品开发。 在整体设计方面,Diana提供两种前端模板选择,只需在配置文件中切换,即可轻松改变界面风格。它支持Sql Server和...
请注意,由于插件可能不兼容Espresso的最新版本,或者由于Espresso自身的更新导致插件失效,因此在安装前最好确认Espresso和HAML.sugar的兼容性信息。 总的来说,HAML.sugar是提升Espresso用户在处理HAML项目时体验...
在实际使用过程中,要注意以下几点: - 确保数据库连接信息的准确性,避免因连接问题导致工具无法正常工作。 - 对于复杂的数据库表结构,如外键关联、自定义类型,工具可能无法完全自动处理,可能需要手动调整生成...
3. **不支持转换**:需要注意的是,这个工具并不自动处理数据类型转换。例如,数据库中的日期时间类型在C#中可能需要转化为DateTime对象,但工具不会自动进行这种转换。开发者需要在生成的代码基础上手动进行调整或...
6. **查询优化**:虽然Sugar ORM简化了SQL操作,但仍然需要注意查询性能。合理设计数据库索引、避免N+1查询等问题,对于提高应用性能至关重要。 7. **测试用例**:这个测试项目可能包含了多种测试场景,比如添加新...
1. "sugarcrm的workflow插件,用于sugarcrm的学习和技术开发":说明此插件是针对SugarCRM系统的一个工作流管理工具,它可以被用来学习SugarCRM系统的工作原理,也可以用于开发和定制工作流。 2. "AlineaSol ...
5. **文档**:README文件、API文档等,解释项目的目的、如何运行和开发中的注意事项。 6. **构建脚本**:如Gruntfile.js或Gulpfile.js,用于自动化构建过程,如代码压缩、合并等。 综上所述,LabyrinthJS.activity...
在.NET框架中,C#是一种常用的编程语言,用于开发各种应用程序,包括与数据库交互的系统。本项目聚焦于"C#对SQL SERVER 2000操作封装类",旨在提供一个方便、高效的数据库操作工具,简化数据库的增、删、改操作。...
需要注意的是,性能测试的结果可能会因具体应用场景、数据库设计、硬件配置等因素而有所不同。在选择ORM框架时,应根据项目需求、团队技能和性能要求进行综合考虑。对于那些重视性能的项目,Dapper或Mego可能是更好...
可用脚本在项目目录中,可以运行:yarn start 在开发模式下运行应用程序。 打开在浏览器中查看它。 如果您进行编辑,则页面将重新加载。 您还将在控制台中看到任何棉绒错误。yarn test 在交互式监视模式下启动测试...
spell_sugar这个库向Python添加了一些反Python的“语法糖”。 注意:这仅仅是一个实验性的原型,它显示了Python中运算符重载的一些潜力。 仅在Python 3.6.0下进行了测试。 语法_糖这可以为Python添加一些反Python的...
在Python编程语言中,"语法糖"(Syntax Sugar)指的是通过简洁、易读的语法来表达复杂的概念...然而,使用第三方库时,也需要注意兼容性问题和代码的可移植性,确保在享受便利的同时,不失去Python原有的简洁和灵活性。
:high_voltage:zap在Go中快速,结构化,水平地记录日志。 ... 安装go get -u go.uber.org...logger,_:= zap.NewProduction()推迟logger.Sync()//刷新缓冲区(如果有的话):= logger.Sugar()sugar.Infow(“ t失败