Java获取虚拟机内存和操作系统内存及其线程
为什么要获取虚拟机内存和操作系统内存呢?
虚拟机内存,这里主要指JVM。为了防止有的时候因为JVM内存问题导致服务器宕机,所以有必要监控JVM的内存。当达到一定值时,通过邮件及时通知,防止线上宕机造成更大的损失。这里监控操作系统的内存同样如此。因为一个服务器上,tomcat,mysql,redis,mongodb,zabbix,nexus,jenkins,maven等等都是要占用操作系统的内存的。
特别是tomcat,mysql等等,线上每天都会产生大量的日志,而这些日志不能删。当然了,通过shell脚本可以定期对这些做备份。但是就拿我上家公司来说,一个服务器上,通常运行5到6个应用。这5到6个应用,虽说以crm和erp为主,对应网站性能和线程并发方面虽要求不高,但是它们在线上也会有大量日志输出,这些日志通常对于解决一些隐性Bug有很大的帮助,同时他们也会占用系统内存的。
关于邮件监控可以参考我的这篇文章:Spring定时任务使用和如何使用邮件监控服务器
另外在此也介绍下hutools这个开源项目,这个开源项目也提供与下面java代码一样的功能(系统属性调用)
参考地址为:http://hutool.mydoc.io/
直接main方法运行,即可获得对应的信息
代码如下:
import java.lang.management.ManagementFactory; import com.sun.management.OperatingSystemMXBean; public class MonitorInfoTest { public static void main(String[] args) { // 虚拟机级内存情况查询 long vmFree = 0; long vmUse = 0; long vmTotal = 0; long vmMax = 0; int byteToMb = 1024 * 1024; Runtime rt = Runtime.getRuntime(); vmTotal = rt.totalMemory() / byteToMb; vmFree = rt.freeMemory() / byteToMb; vmMax = rt.maxMemory() / byteToMb; vmUse = vmTotal - vmFree; System.out.println("JVM内存已用的空间为:" + vmUse + " MB"); System.out.println("JVM内存的空闲空间为:" + vmFree + " MB"); System.out.println("JVM总内存空间为:" + vmTotal + " MB"); System.out.println("JVM总内存空间为:" + vmMax + " MB"); System.out.println("======================================"); // 操作系统级内存情况查询 OperatingSystemMXBean osmxb = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); String os = System.getProperty("os.name"); long physicalFree = osmxb.getFreePhysicalMemorySize() / byteToMb; long physicalTotal = osmxb.getTotalPhysicalMemorySize() / byteToMb; long physicalUse = physicalTotal - physicalFree; System.out.println("操作系统的版本:" + os); System.out.println("操作系统物理内存已用的空间为:" + physicalFree + " MB"); System.out.println("操作系统物理内存的空闲空间为:" + physicalUse + " MB"); System.out.println("操作系统总物理内存:" + physicalTotal + " MB"); // 获得线程总数 ThreadGroup parentThread; int totalThread = 0; for (parentThread = Thread.currentThread().getThreadGroup(); parentThread .getParent() != null; parentThread = parentThread.getParent()) { totalThread = parentThread.activeCount(); } System.out.println("获得线程总数:" + totalThread); } }
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
2-AII--BroadcastReceiver有序广播
零、前言 先讲个场景小故事: 从前,有个小男孩捡到一颗漂亮的石头,他想去卖,价格1元。 男孩(Boy)大喊:"我有一个漂亮的石头,只卖1元",一个石匠买了这个石头。 石匠(Stonemason)大喊:"我有一个漂亮的石头,只卖1000元。"一个雕刻家买了这个石头。 雕刻家(Graver)大喊:"我有一个漂亮的石头,只卖10w元。"一个宝石家买了这个石头。 宝石家(RubyMan)大喊:"我有一个漂亮的石头,只卖1000w元。"收藏家买了这个石头。 收藏家(Collector)不喊了,静静地收藏起来。男孩用一元买了一个棒棒糖,开心地吃着。故事结束。 按照这个顺序,只要某个人不喊了,任何一个环节都可以被打断,而导致石头的价格出现差异。这就是有序广播的作用。 有序广播.gif 二、广播接收者代码实现 1.男孩广播接收者:BR1_Boy.java public class BR1_Boy extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //[1]获取到发送...
- 下一篇
SpringAop之日志管理
导入的依赖均为JavaWeb界面在线配置代码生成器这篇文章,你只需将这篇文章的maven依赖导入即可。 SpringAop利用注解的特性进行日志管理,只需在对应的方法上加上自己编写的注解,即可完美实现日志管理。 日志管理的目的是,将后台管理人员,安卓人员,第三方人员每天请求的url和是谁操作的,在哪操作,使用什么系统操作,输入的那些参数,使用什么请求等等统统记录下来。方便异常排查和应对外来的web攻击。 关于Controller和spring-mvc.xml使用了shiro,关于shiro方面可以参考我的如下文章,进行学习: MP实战系列(九)之集成Shiro shiro实战系列 步骤如下: 一、编写注解类 package com.anotation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; imp...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS关闭SELinux安全模块
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Mario游戏-低调大师作品