Run/Edit Configurations Configuration/VM options 例如:设置运行内存为:-Xmx3m -Xms3m
-
2019-06-21 17:21:00
转载于:https://www.cnblogs.com/longchang/p/11065809.html
更多相关内容 -
Java-检测Java程序运行时内存消耗的方法-Jconsole
2016-12-20 01:26:10考CCF的时候,一个很重要的标准是代码执行时间和占用内存。执行时间我们可以通过System.currentTimeMillis()方法来计算;而占用内存没有办法(我暂时没有找到办法)直接通过程序查看。考CCF的时候,一个很重要的标准是代码执行时间和占用内存。执行时间我们可以通过System.currentTimeMillis()方法来计算;而占用内存没有办法(我暂时没有找到办法)直接通过程序查看。要想查看内存使用情况,就要借助java的JDK提供的一个工具-Jconsole.exe。在java jdk安装目录的bin文件夹内。
JConsole是一个基于JMX的GUI工具,用于连接正在运行的JVM。可以监控本地和远程的java程序。
1.启动jconsole的两种方式:1)直接运行jconsole.exe
2)在dos窗口中输入jconsole或者在文件夹地址框内输入jconsole
将会弹出Java监视和管理控制台。
2.Jconsole 可以监视本地java进程和远程java进程
1.要监视本地java进程,直接选择你要监视的本地正在运行的java进程,点击连接就可以了
2.要监视远程java进程需要在远程机做相应的设置: -
Python 程序运行时CPU和内存高解决思路
2021-02-04 16:19:14一个简单的爬虫程序,爬取10页数据共计150条,每天定时写入数据库总共不到150行,没运行期间内存已经20%多了,运行期间内存会涨到60%,CPU会涨到40%左右一个简单程序如此高的消耗肯定是有问题的,参考了网上的一些...这篇文章是基于上篇文章的续章~
一台机器要部署很多爬虫,每天定时执行的情况下,服务器CPU和内存占比较高的情况出现后
模拟一份代码,进行分析。
一个简单的爬虫程序,爬取10页数据共计150条,每天定时写入数据库
总共不到150行,没运行期间内存已经20%多了,运行期间内存会涨到60%,CPU会涨到40%左右
一个简单程序如此高的消耗肯定是有问题的,参考了网上的一些文章
有使用工具的,安装第三方包的,写时间判断的等等
但是对我的帮助不大(windows....)
努(带)力(薪)工(拉)作(*)之后,根据看过的文章思考了一番:1.内存和CPU高代表着程序当中的部分代码在大量或反复的执行2.爬取的时间3-4秒,写入MYSQL数据库,解析使用的XPATH,
保存数据使用的单表,索引只有ID和URL,表结构数据长度都合适3.使用了线程,线程数4个4.没有文件读写操作,网络请求较快,对方服务器响应较快5.使用了schedule定时模块6.对后台接口进行任务轮询和定时模块当中出现了while True
还有文章提到判断导入的模块是否时c写的,导致底层频繁调用,首先这个说法不说对不对...一是不会看,二是看了不也得用这个模块吗
所以不考虑这种情况1.部分代码在大量或反复的执行,具体是哪里差
-
程序运行时的内存空间分布
2014-03-21 01:33:18其实在程序运行时,由于内存的管理方式是以页为单位的,而且程序使用的地址都是虚拟地址,当程序要使用内存时,操作系统再把虚拟地址映射到真实的物理内存的地址上。所以在程序中,以虚拟地址来看,数据或代码是一块...我们在写程序时,既有程序的逻辑代码,也有在程序中定义的变量等数据,那么当我们的程序进行时,我们的代码和数据究竟是存放在哪里的呢?下面就来总结一下。
一、程序运行时的内存空间情况
其实在程序运行时,由于内存的管理方式是以页为单位的,而且程序使用的地址都是虚拟地址,当程序要使用内存时,操作系统再把虚拟地址映射到真实的物理内存的地址上。所以在程序中,以虚拟地址来看,数据或代码是一块块地存在于内存中的,通常我们称其为一个段。而且代码和数据是分开存放的,即不储存于同于一个段中,而且各种数据也是分开存放在不同的段中的。
下面以一个简单的程序来看一下在Linux下的程序运行空间情况,代码文件名为space.c#include <unistd.h> #include <stdio.h> int main() { printf("%d\n", getpid()); while(1); return 0; }
这个程序非常简单,输出当前进程的进程号,然后进入一个死循环,这个死循环的目的只是让程序不退出。而在Linux下有一个目录/proc/$(pid),这个目录保存了进程号为pid的进程运行时的所有信息,其中有一个文件maps,它记录了程序执行过程中的内存空间的情况。编译运行上面的代码,其运行结果如图1所示:
从上面的图中,我们可以看到这样一个简单的程序,在执行时,需要哪些库和哪些空间。上面的图的各列的意思,不一一详述,只对重要的进行说明。第一列的是一个段的起始地址和结束地址,第二列这个段的权限,第三列段的段内相对偏移量,第六列是这个段所存放的内容所对应的文件。从上图可以看到我们的程序进行首先要加载系统的两个共享库,然后再加载我们写的程序的代码。
对于第二列的权限,r:表示可读,w:表示可写,x:表示可执行,p:表示受保护(即只对本进程有效,不共享),与之相对的是s,意是就是共享。
从上图我们可以非常形象地看到一个程序进行时的内存分布情况。下面我们将会结合上图,进行更加深入的对内存中的数据段的解说。
二、程序运行时内存的各种数据段
1.bss段该段用来存放没有被初始化或初始化为0的全局变量,因为是全局变量,所以在程序运行的整个生命周期内都存在于内存中。有趣的是这个段中的变量只占用程序运行时的内存空间,而不占用程序文件的储存空间。可以用以下程序来说明这点,文件名为bss.c#include <stdio.h> int bss_data[1024 * 1024]; int main() { return 0; }
这个程序非常简单,定义一个4M的全局变量,然后返回。编译成可执行文件bss,并查看可执行文件的文件属性如图2所示:
从可执行文件的大小4774B可以看出,bss数据段(4M)并不占用程序文件的储存空间,在下面的data段中,我们可以看到data段的数据是占用可执行文件的储存空间的。
在图1中,有文件名且属性为rw-p的内存区间,就是bss段。
2.data段初始化过的全局变量数据段,该段用来保存初始化了的非0的全局变量,如果全局变量初始化为0,则编译有时会出于优化的考虑,将其放在bss段中。因为也是全局变量,所以在程序运行的整个生命周期内都存在于内存中。与bss段不同的是,data段中的变量既占程序运行时的内存空间,也占程序文件的储存空间。可以用下面的程序来说明,文件名为data.c:#include <stdio.h> int data_data[1024 * 1024] = {1}; int main() { return 0; }
这个程序与上面的bss唯一的不同就是全局变量int型数组data_data,其中第0个元素的值初始化为1,其他元素的值初始化成默认的0,而因为数组的地址是连续的,所以只要有一个元素在data段中,则其他的元素也必然在data段中。编 译连接成可执行文件data,并查看可执行文件的文件属性如图3所示:
从可执行文件的大小来看,data段数据(data_data数组的大小,4M)占用程序文件的储存空间。
在图1中,有文件名且属性为rw-p的内存区间,就是data段,它与bss段在内存中是共用一段内存的,不同的是,bss段数据不占用文件,而data段数据占用文件储存空间。
3.rodata段该段是常量数据段,用于存放常量数据,ro就是Read Only之意。但是注意并不是所有的常量都是放在常量数据段的,其特殊情况如下:1)有些立即数与指令编译在一起直接放在代码段(text段,下面会讲到)中。2)对于字符串常量,编译器会去掉重复的常量,让程序的每个字符串常量只有一份。3)有些系统中rodata段是多个进程共享的,目的是为了提高空间的利用率。
在图1中,有文件名的属性为r--p的内存区间就是rodata段。可见他是受保护的,只能被读取,从而提高程序的稳定性。
4.text段text段就是代码段,用来存放程序的代码(如函数)和部分整数常量。它与rodata段的主要不同是,text段是可以执行的,而且不被不同的进程共享。
在图1中,有文件名且属性为r-xp的内存区间就是text段。就如我们所知道的那样,代码段是不能被写的。
5.stack段该段就是栈段,用来保存临时变量和函数参数。程序中的函数调用就是以栈的方式来实现的,通常栈是向下(即向低地址)增长的,当向栈中push一个元素,栈顶指针就会向低地址移动,当从栈中pop一个元素,栈顶指针就会向高地址移动。栈中的数据只在当前函数或下一层函数中有效,当函数返回时,这些数据自动被释放,如果继续对这些数据进行访问,将发生未知的错误。通常我们在程序中定义的不是用malloc系统函数或new出来的变量,都是存放在栈中的。例如,如下函数:void func() { int a = 0; int *n_ptr = malloc(sizeof(int)); char *c_ptr = new char; }
整型变量a,整型指针变量n_ptr和char型指针变量c_ptr,都存放在栈段中,而n_ptr和c_ptr指向的变量,由于是malloc或new出来的,所以存放在堆中。当函数func返回时,a、n_ptr、c_ptr都会被释放,但是n_ptr和c_ptr指向的内存却不会释放。因为它们是存在于堆中的数据。
在图1中,文件名为stack的内存区间即为栈段。
6.heap段heap(堆)是最自由的一种内存,它完全由程序来负责内存的管理,包括什么时候申请,什么时候释放,而且对它的使用也没有什么大小的限制。在C/C++中,用alloc系统函数和new申请的内存都存在于heap段中。
以上面的程序为例,它向堆申请了一个int和一个char的内存,因为没有调用free或delete,所以当函数返回时,堆中的int和char变量并没有释放,造成了内存泄漏。
由于在图1所对应的代码中没有使用alloc系统函数或new来申请内存,所以heap段并没有在图1中显示出来,所以以下面的程序来说明heap段的位置,代码文件为heap.c,代码如下:#include <unistd.h> #include <stdlib.h> #include <stdio.h> int main() { int *n_ptr = malloc(sizeof(int)); printf("%d\n", getpid()); while(1); free(n_ptr); return 0; }
查看其运行时内存空间分布如下:
可以看到文件名为heap的内存区间就是heap段。从上图,也可以看出,虽然我们只申请4个字节(sizeof(int))的空间,但是在操作系统中,内存是以页的方式进行管理的,所以在分配heap内存时,还是一次分配就为我们分配了一个页的内存。注:无论是图1,还是上图,都有一些没有文件名的内存区间,其实没用文件名的内存区间表示使用mmap映射的匿名空间。
-
如何知道自己用c/c++编写的程序运行时会占用多大的内存呢?
2014-07-29 02:59:26就是自己在做一些ACM的题目然后有些题目内存会超,有没有什么方法可以测试自己写的程序到底占用了多大的内存呢? 我用指针实现的树结构,然后标程是用数组实现的,数组占得内存比指针少吗? -
对pycharm 修改程序运行所需内存详解
2020-12-02 14:08:32XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow 以上这篇对pycharm 修改程序运行所需内存详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。 -
一文看懂JVM运行时内存分布
2021-11-26 16:03:40前言 繁忙的一年即将过去,由于若干种原因,下定决心开始写一些基础系列,主要...从1+2等3来看JVM运行时内存分布 新建一个Test类,定义一个静态方法sum,代码如下所示: public class Test { public static voi. -
分析python程序性能——查看程序运行时间和占用内存
2019-10-30 10:37:26检查python程序运行时间、CPU和内存占用的方法 (python3.6.8,亲测可用) 用line_profiler性能调试工具检测每一行python代码的运行时间 。 参考(https://my.oschina.net/readerror/blog/2054612 安装包 方法一 :... -
C/C++ 获取程序运行时间和内存占用(openssl使用)
2020-08-31 22:07:00使用windows API计算程序内存和时间消耗 获取内存使用量 获取内存使用量主要使用Psapi.h中声明的GetProcessMemoryInfo函数: 引入头文件: #include <windows.h> #include <psapi.h> #pragma comment... -
pycharm如何增加运行时内存
2020-04-09 11:31:19步骤 1,Help -> Find Action -> (输入 “VM”) ->...2,Pycharm会在编辑器中打开适当的vmoptions文件(pycharm.vmoptions或pycharm64.options)。 3,将**-Xms**属性的值修改为你想要的结果,然后保存 ... -
pycharm 修改程序运行所需内存
2018-04-20 16:32:39-Xms 和 -Xmx是java 命令的一个选项,用来设置你的应用程序启动时的可用内存大小和运行时的可用的内存大小。 修改 -Xms为 256m -Xmx为 1024m 修改后设置为: - server - Xms256m - Xmx1024m - XX :... -
Linux下查看某一个程序运行所占用的内存
2017-04-18 17:00:19VmExe(KB) 程序所拥有的可执行虚拟内存的大小,代码段,不包括任务使用的库 (end_code-start_code) VmLib(KB) 被映像到任务的虚拟内存空间的库的大小 (exec_lib) VmPTE 该进程的所有页表的大小,单位:kb ... -
VS2017_扩大程序运行内存
2019-04-22 17:10:52一个win32(x86)程序的可用内存只有2GB,如果连接到/LARGEADDRESSAWARE,则可以申请到将近4GB内存vs2017中修改方法:在右侧解决方案资源管理器中,右击解决方案名称,单击属性,左侧链接器->系统,启用大地址改为... -
Jupyter notebook 解决程序运行持续占用内存问题
2020-10-19 20:13:46在jupyter中运行程序后,点击kernel中的shutdown。如下图所示 或者 当然,在一开始的时候加上如下代码,进行显存管理是必要的: import tensorflow as tf import os os.environ["CUDA_VISIBLE_DEVICES"] = '... -
程序运行结束后,内存泄漏还存在吗?
2018-12-05 20:53:37原因1:如果程序存在内存泄漏,但恰好运行的操作系统可以帮你自动释放,那么短时间运行没问题。但是,如果移植到另一个没有内存自动回收功能的操作系统,怎么办? 原因2:大多数程序是服务端的守护进程,是一直运行... -
程序运行内存占用不断增大
2017-03-30 10:03:581.考虑有没有日志类,如果程序在运行时不断向控件中写日志,而又没有采用控制日志条目,则内存会一直增大。 -
运行内存太小怎么办?如何扩大电脑的运行内存?
2021-07-29 02:37:44运行内存介绍运行内存,也称作主存,是指程序运行时需要的内存,只能临时存储数据用于与CPU交换高速缓存数据,一般多指随机存取存储器(Random Access Memory,RAM)。如何扩大电脑的运行内存?电脑内存在电脑运行中起... -
在linux下,怎么去查看一个运行中的程序, 到底是占用了多少内存
2020-09-14 14:28:521. 在linux下,查看一个运行中的程序, 占用了多少内存, 一般的命令有 (1). ps aux: 其中 VSZ(或VSS)列 表示,程序占用了多少虚拟内存。 RSS列 表示, 程序占用了多少物理内存。 虚拟内存可以不用考虑,它... -
win10运行内存多大才够用?windows10需要多大运行内存
2021-07-26 07:32:38越来越多的用户都喜欢安装win10系统,然而又不知道自己的电脑配置是否适合win10系统,其中运行内存是很多用户关心的,那么win10运行内存多大才够用,为此,小编这就给大家讲解一下windows10需要多大运行内存吧。... -
程序的运行机制——CPU、内存、指令的那些事
2017-03-11 09:55:49序言 说起计算机大家并不陌生,在计算机上又运行着各种程序,如QQ、微信等。这些程序有可以为我们做很多事情,能聊天、能玩游戏等等。那么这些看似复杂的程序在计算机中到底是怎么运行起来的呢?...在程序运行流程中, -
IDEA编辑器如何查看当前运行内存情况
2019-08-23 23:28:48在window系统下,我们除了通过任务管理器查看当前运行情况,还可以使用IDEA自带的内存检测工具。 具体的设置方法如下所示: 在IDEA的右下角就有一个很小的角落,显示当前运行的内存情况,可以根... -
MFC 客户端程序程序运行显示内存不足
2015-05-09 09:24:11运行客户端程序点击获取屏幕总会提示内存不足 搞了半天也不知道问题在哪里,也不知道怎么调试 求大神指教  代码: ... -
实测:微信小程序究竟会占用多少内存?结果竟然
2020-12-28 22:26:13上图就是小编微信中已经安装的小程序列表、微信占用的内存空间数据。接下来小编安装两个小程序。上图就是安装小程序之后的结果,可以看出,安装程序对内存空间影响几乎没有。(可能是极小,小到可以忽略不计。)结论:... -
MATLAB运行程序时怎么查看还有多久完成
2021-04-18 07:55:523、点击上方的暂停图标,即可暂时停止程序运行,如下图所示。4、然后,如果真的想要强制停止正忙的程序,点击如下图所示的退出调试即可。5、这样左下角就不会显示正忙了,程序已经被强制停止,如下图所示就完成了... -
java运行内存分配图
2012-02-22 12:24:43Java程序运行时的内存结构分成:方法区、栈内存、堆内存、本地方法栈几种。 方法区 存放装载的类数据信息,包括:基本信息:每个类的全限定名、每个类的直接超类的全限定名、该类是类还是接口、该类型的访问... -
java程序运行一段时间后内存爆满,cpu使用率迅速增加(解决)
2018-11-12 09:38:30上周遇到一个很奇葩的问题,现场反应,程序运行20分钟以后cpu使用率在90%以上,拿到代码无从下手,经过几天的研究,最终找到原因并解决。 通过现场bug现象,初步分析,是由于程序占用过多的系统资源,导致cpu使用率... -
java程序运行时jvm内存分配
2017-05-03 14:59:36概述 众所周知,在内存管理方面,对于从事C,C++的开发人员来说,他们是内存管理方面的“上帝”,负责着每一个对象生命开始到结束,这样一定程度上给程序员增加了很多麻烦(每个new操作都要写...接下来说说程序运行... -
程序运行时三种内存分配策略
2012-10-07 16:05:08按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的. 静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编译时就可以给他们分配固定的内存空间.这种... -
计算机正在运行的程序存放在哪里?
2021-07-28 01:15:35计算机正在运行的程序存放在RAM(内存)里。RAM是与CPU进行沟通的桥梁;计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。计算机正在运行的程序存放在RAM(内存)里。RAM是与CPU进行沟通...