FreeMem

常用的JVM配置参数

喜欢而已 提交于 2021-01-22 10:36:34
一、Trace 跟踪参数   在Eclipse中,如何打开GC的监控日志     选择菜单栏Run -> Run Configurations -> Java Application -> 选择自己的项目 -> 在右侧找到Arguments选项卡 -> 在VM arguments中填写参数,具体参数在下面会有说明。     根据右侧Main的project和下面Main class确定自己监控的main方法     在右侧找到Arguments选项卡 -> 在VM arguments中填写参数 -verbose:gc(打开GC的跟踪日志) -XX:+printGC(打开GC的log的开关,简要日志)     上图为我自己的一个小项目中的gc简要的日志信息 其中 9865k 表示在堆中GC之前使用了9865k的空间,2891k 表示GC之后使用2891k的空间,剩空间为19456k ,本次GC使用的时间为0.0021802 secs -XX:+PrintGCDetails(打印GC的详细信息)     上图我们以第二条为例:PSYoungGen表示新生代 GC之前为9214k,GC之后为 1016K,新生代总大小为9216k,GC所使用的时间为0.0016505 secs。而后面的信息则为上面简要信息中的内容。user 总计本次 GC 总线程所占用的总 CPU 时间 ,sys –

操作系统lab2实验总结——Part1

坚强是说给别人听的谎言 提交于 2020-11-28 08:27:02
​ 这是MIPS虚拟映射布局图,在接下来的实验中,我们需要特别注意的地址分别是kuseg和kseg0区,首先列出这两个区域的意义。 MIPS虚存映射布局 32位的MIPS CPU最大寻址空间为4GB(2^32字节),这4GB虚存空间被划分为四个部分: kuseg (TLB-mapped cacheable user space, 0x00000000 - 0x7fffffff): 这一段是用户模式下可用的地址,大小为2G,也就是MIPS约定的用户内存空间。需要通过MMU进行虚拟地址到物理 地址的转换。 kseg0 (direct-mapped cached kernel space, 0x80000000 - 0x9fffffff): 这一段是内核地址,其内存虚存地址到物理内存地址的映射转换不通过MMU,使用时只需要将地址的最高位清零 (& 0x7fffffff), 这些地址就被转换为物理地址。也就是说,这段逻辑地址被连续地映射到物理内存的低端512M空间。对这段地址 的存取都会通过高速缓存(cached)。通常在没有MMU的系统中,这段空间用于存放大多数程序和数据。对于有 MMU 的系统,操作系统的内核会存放在这个区域。 kuseg中有三个大小为PDMAP(4MB)的区域,分别从0x7f400000开始是ENVS,PAGES和User VPT。 需要注意的是PAGES和User

有感于STL的内存管理

只谈情不闲聊 提交于 2020-08-18 03:38:33
1. 背景 前些天在一个技术分享会上,某大牛说,STL使用了内存池,释放内存的时候,并不释放给OS,而是自己由留着用。 听到这些观点后,我就有些着急了,因为我以前一直是直接使用STL的一些工具类的,比如std::string、std::map、std::vector、std::list等等,从来都没有关注过内存的问题。 带着内存的问题,我花了两三天的时间去阅读STL的代码,并且写一些简单的程序进行测试;下面列举一些心得体会,但是却没有什么大的结论 -.- 2. 容易误解的简单例子 我们以STL中的map为例,下面有一个使用map的简单例子,大部分人可以在30秒内写好。 void testmap() { map<int, float> testmap; for (int i = 0; i < 1000000; i++) { testmap[i] = (float)i; } testmap.clear(); } 为了在调用map::clear()之后查看进程的内存使用量,我们可以加几行代码让程序暂停一下。 void testmap() { map<int, float> testmap; for (int i = 0; i < 1000000; i++) { testmap[i] = (float)i; } testmap.clear(); // 观察点 int tmp; cout <

Django实现环境实时监控功能

前提是你 提交于 2020-08-07 08:07:23
效果预览 服务端方法getEnvinfo接口开发 1.依赖包安装(ssh协议工具包) pip install paramiko 2.主机配置 host = {'ip': ip, 'port': port, 'username': username, 'password': password} 3.远程执行命令并获取返回结果 #打开ssh客户端 ssh = paramiko.SSHClient() # 设置为接受不在known_hosts 列表的主机可以进行ssh连接 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(hostname=host['ip'], port=host['port'], username=host['username'], password=host['password']) #获取内存信息 stdin, stdout, stderr = ssh.exec_command('sudo free -m|grep Mem') str_out = stdout.read().decode() totalmem = str(str_out).split(" ")[1].replace(" ","") freemem = str(str_out).split(" ")[2]

获取文件版本信息的方法

我是研究僧i 提交于 2020-08-06 23:29:26
方法一,取回来的都是字符串: procedure TForm1.ShowVersion; const InfoNum = 9; InfoStr: array[1..InfoNum] of string = ( 'ProductName', 'ProductVersion', 'FileDescription', 'LegalCopyright', 'FileVersion', 'CompanyName', 'LegalTradeMarks', 'InternalName', 'OriginalFileName' ); var S: string; BufSize, Len: DWORD; Buf: PChar; Value: PChar; begin mmo1.Clear; S := FFileName; BufSize := GetFileVersionInfoSize(PChar(S), BufSize); if BufSize > 0 then begin Buf := AllocMem(BufSize); GetFileVersionInfo(PChar(S), 0, BufSize, Buf); if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[1]), Pointer(Value), Len

C++内存池的实现和原理(二)

余生颓废 提交于 2020-07-28 17:27:55
1、#include "Alloctor.h" 文件 #ifndef _ALLOCTOR_H_ #define _ALLOCTOR_H_ // 重载函数声明 void * operator new (size_t size); void operator delete ( void * p); void * operator new [](size_t size); void operator delete []( void * p); // 给重载后的operator函数换一个函数名 void * mem_alloc(size_t size); void mem_free( void * p); #endif // !_ALLOCTOR_H_ 2、#include "Alloctor.cpp" 文件 #include " Alloctor.h " #include <stdlib.h> #include " MemoryMgr.hpp " // 重载new运算符,单个内存分配 void * operator new (size_t nSize) { return MemoryMgr::Instance().allocMem(nSize); } // 重载delete运算符,单个内存释放 void operator delete ( void * p) { MemoryMgr:

Delphi结构体的扩展,可以自动初始化,反初始化,自定义拷贝函数.

荒凉一梦 提交于 2020-04-29 10:26:32
文章转贴,原文地址为http://www.raysoftware.cn/?p=518 众所周知Delphi的record和CPP的struct是有区别的.CPP的struct可以看成是class的别名,可以有构造,析构,可以继承. Delphi的record几年前开始支持方法,支持操作符重载,美中不足之处在于不能自己写默认构造函数.Delphi的帮助文档说可以自己写有参数的constructor但是不能写不带参数的constructor/destructor.但是实际上除非是有引用类型变量,否则结构体不会被初始化. 这就产生了一些问题, 比如说我要借助record的操作符重载,重载+,:=等操作符,自己实现一个string record.但是这个record每次声明以后必须要手动初始化一下,否则里面的内容未被初始化,是随机值. TString = record</pre> len : Integer; //这个不会被自动初始化 data : pchar; //这个不会被自动初始化 class operator Add(a, b: TString ): TString; end; 实现了一个结构体的初始化,反初始化,拷贝的自动调用单元. 只要你的结构体引用了AutoRecord这个类型的变量,那么结构体就可以自动调用初始化,反初始化,拷贝. 比如: TTest = record _

第五课:《Linux就该这么学》课堂笔记

半腔热情 提交于 2020-02-27 09:04:18
“工作马马虎虎,只想在兴趣和游戏中寻觅快活,充其量只能获得一时的快感,绝不能尝到从心底涌出的惊喜和快乐,但来自工作的喜悦并不像糖果那样—放进嘴里就甜味十足,而是需要从苦劳与艰辛中渗出,因此当我们聚精会神,孜孜不倦,克服艰辛后的成就感,世上没有哪种喜悦可以类比”。——稻盛和夫 “更何况人类生活中工作占据了较大的比重,如果不能从劳动中、工作中获得充实感,那么即使从别的地方找到快乐,最终我们仍然会感到空虚和缺憾”。——稻盛和夫 ———————————————————————————————————————— 蓝色字体: 需要输入的命令 红色字体: 重点关注的解释和说明 学习重点: 4.2 编写Shell脚本 Shell 脚本命令的工作方式有两种: 交互式 和 批处理 。 Ø 交互式(Interactive): 用户每输入一条命令就立即执行。 Ø 批处理(Batch): 由用户事先编写好一个完整的Shell脚本,Shell会一次性执行脚本中诸多的命令。 查看 SHELL 变量可以发现当前系统已经默认使用 Bash 作为命令行终端解释器了: [root @linuxprobe ~]# echo $SHELL /bin/bash 4.2.1 编写简单的脚本 例如,如果想查看当前所在工作路径并列出当前目录下所有的文件及属性信息,实现这个功能的脚本应该类似于下面这样: [root

Linux学习第五天

落爺英雄遲暮 提交于 2020-02-27 04:07:13
唉!写博客不保存真是坏习惯 接续第4章部分内容 配置主机名称 --主机名大多保存在/etc/hostname文件中 --步骤: --第1步:使用Vim编辑器修改“/etc/hostname”主机名称文件 --第2步:把原始主机名称删除后追加“ linuxprobe.com ”。注意,使用Vim编辑器修改主机名称文件后,要在末行模式下执行:wq!命令才能保存并退出文档 --第3步:保存并退出文档,然后使用hostname命令检查是否修改成功 hostname命令 --作用是查看当前的主机名称,但有时主机名称的改变不会立即同步到系统中,所以如果发现修改完成后还显示原来的主机名称,可重启虚拟机后再行查看 [root@linuxprobe ~]# hostname linuxprobe.com =============================================我·是·分·割·线============================================= 配置网卡信息 --网卡配置文件存放于/etc/sysconfig/network-scripts目录中 --步骤: --第1步:首先切换到/etc/sysconfig/network-scripts目录中 --第2步:使用Vim编辑器修改网卡文件ifcfg-eno16777736

linux-buff/cache过大导致内存不足-程序异常

风流意气都作罢 提交于 2019-11-30 22:50:23
问题描述 Linux内存使用量超过阈值,使得Java应用程序无可用内存,最终导致程序崩溃。即使在程序没有挂掉时把程序停掉,系统内存也不会被释放。 找原因的过程 这个问题已经困扰我好几个月了,分析过好多次都没有找到原因,网上查了一下该问题其他人也都遇到过,不过并没有什么好的解决方案,因为项目一直没有上线,每次当内存不足时导致程序崩溃都是重启服务就好了,索性也就没花太多的时间来找问题。现在项目马上上线了,不能在出现程序崩溃的情况了,况且还是前置系统,更不能出现任何问题。 最开始一直认为是程序的原因导致内存泄漏,使用jdk自带的jmap -F -dump:live,format=b,file=/usr/local/sztFront/logs/heapdump.bin命令输出过几次dump文件,通过MemoryAnalyzer分析,应用程序没有耗内存过大的变量。后台猜测是否日志输出过多导致的,毕竟是前置系统,每天的报文量特别大,日志能到达5,6个G。所以把日志接收报文关了,日志大小马上降下来了,每天200M。程序挂掉的时间变长了,原来差不多一周就挂掉了,现在可以达到两周左右才挂掉,还是不行,没有冲根本上解决问题。经过在网上搜索各种相关的问题,问题出现在Cached的值过大,导致系统没有可以再分配的内存空间。Cached只要用来缓存文件的,经常读写的文件会被缓存到Cached中