linux下查看内存的命令?
top命令能显示系统内存。目前常用的Linux下查看内容的专用工具是free命令。下面是对内存查看free命令输出内容的解释:
total:总计物理内存的大小。
used:已使用多大。
free:可用有多少。
Shared:多个进程共享的内存总额。
Buffers/cached:磁盘缓存的大小。熟悉linux基础命令,可以看看《linux就该这么学》一书。
如何在linux下检测内存泄漏?
要想检测内存泄漏,就必须对程序中的内存分配和释放情况进行记录,所能够采取的办法就是重载所有形式的operator new 和 operator delete,截获 new operator 和 delete operator 执行过程中的内存操作信息。下面列出的就是重载形式
void* operator new( size_t nSize, char* pszFileName, int nLineNum )
void* operator new( size_t nSize, char* pszFileName, int nLineNum )
void operator delete( void *ptr )
void operator delete( void *ptr )
我们为 operator new 定义了一个新的版本,除了必须的 size_t nSize 参数外,还增加了文件名和行号,这里的文件名和行号就是这次 new operator 操作符被调用时所在的文件名和行号,这个信息将在发现内存泄漏时输出,以帮助用户定位泄漏具体位置。对于 operator delete,因为无法为之定义新的版本,我们直接覆盖了全局的 operator delete 的两个版本。
在重载的 operator new 函数版本中,我们将调用全局的 operator new 的相应的版本并将相应的 size_t 参数传入,而后,我们将全局 operator new 返回的指针值以及该次分配所在的文件名和行号信息记录下来,这里所采用的数据结构是一个 STL 的 map,以指针值为 key 值。当 operator delete 被调用时,如果调用方式正确的话(调用方式不正确的情况将在后面详细描述),我们就能以传入的指针值在 map 中找到相应的数据项并将之删除,而后调用 free 将指针所指向的内存块释放。当程序退出的时候,map 中的剩余的数据项就是我们企图检测的内存泄漏信息--已经在堆上分配但是尚未释放的分配信息。
以上就是内存检测实现的基本原理,现在还有两个基本问题没有解决:
1) 如何取得内存分配代码所在的文件名和行号,并让 new operator 将之传递给我们重载的 operator new。
2) 我们何时创建用于存储内存数据的 map 数据结构,如何管理,何时打印内存泄漏信息。
先解决问题1。首先我们可以利用 C 的预编译宏 __FILE__ 和 __LINE__,这两个宏将在编译时在指定位置展开为该文件的文件名和该行的行号。而后我们需要将缺省的全局 new operator 替换为我们自定义的能够传入文件名和行号的版本,我们在子系统头文件 MemRecord.h 中定义:
#define DEBUG_NEW new(__FILE__, __LINE__ )
而后在所有需要使用内存检测的客户程序的所有的 cpp 文件的开头加入
#include “MemRecord.h”
#define new DEBUG_NEW
就可以将客户源文件中的对于全局缺省的 new operator 的调用替换为 new (__FILE__,__LINE__) 调用,而该形式的new operator将调用我们的operator new (size_t nSize, char* pszFileName, int nLineNum),其中 nSize 是由 new operator 计算并传入的,而 new 调用点的文件名和行号是由我们自定义版本的 new operator 传入的。我们建议在所有用户自己的源代码文件中都加入上述宏,如果有的文件中使用内存检测子系统而有的没有,则子系统将可能因无法监控整个系统而输出一些泄漏警告。
再说第二个问题。我们用于管理客户信息的这个 map 必须在客户程序第一次调用 new operator 或者 delete operator 之前被创建,而且在最后一个 new operator 和 delete operator 调用之后进行泄漏信息的打印,也就是说它需要先于客户程序而出生,而在客户程序退出之后进行分析。能够包容客户程序生命周期的确有一人–全局对象(appMemory)。我们可以设计一个类来封装这个 map 以及这对它的插入删除操作,然后构造这个类的一个全局对象(appMemory),在全局对象(appMemory)的构造函数中创建并初始化这个数据结构,而在其析构函数中对数据结构中剩余数据进行分析和输出。Operator new 中将调用这个全局对象(appMemory)的 insert 接口将指针、文件名、行号、内存块大小等信息以指针值为 key 记录到 map 中,在 operator delete 中调用 erase 接口将对应指针值的 map 中的数据项删除,注意不要忘了对 map 的访问需要进行互斥同步,因为同一时间可能会有多个线程进行堆上的内存操作。
好啦,内存检测的基本功能已经具备了。但是不要忘了,我们为了检测内存泄漏,在全局的 operator new 增加了一层间接性,同时为了保证对数据结构的安全访问增加了互斥,这些都会降低程序运行的效率。因此我们需要让用户能够方便的 enable 和 disable 这个内存检测功能,毕竟内存泄漏的检测应该在程序的调试和测试阶段完成。我们可以使用条件编译的特性,在用户被检测文件中使用如下宏定义:
#include “MemRecord.h”
#if defined( MEM_DEBUG )
#define new DEBUG_NEW
#endif
当用户需要使用内存检测时,可以使用如下命令对被检测文件进行编译
g++ -c -DMEM_DEBUG xxxxxx.cpp
就可以 enable 内存检测功能,而用户程序正式发布时,可以去掉 -DMEM_DEBUG 编译开关来 disable 内存检测功能,消除内存检测带来的效率影响。
linux怎么把剩余内存分给data目录?
内存不能分给data目录,因为内存是linux系统自动进行分配。
Linux怎么使用nmon监控性能,分析系统性能数据?
nmon analyser
这是一个表格,内置处理分析功能,通过Excel宏来实现的
操作步骤:
监控数据生成,通过nmon命令行来在服务器端生成
数据下载,通过ftp、scp等工具来完成
数据导入,通过Excel表格来实现
数据分析,宏会帮助你实现数据分析,生成数据报告
总体来说nmon是非常牛逼的,报告也很自然好看,至少比绝大多数人手工做的要好
是个值得推荐的工具。
性能分析
其实光有报告,还不能算分析,真正的分析是人脑完成的
比如:CPU占用高不高,是不是正常,IO是不是正常,网络带宽、内存占用、cache大小等。。。。。靠对操作系统和应用软件深入的理解才能真正分析出来是不是有优化空间,数据是否正常等
4g摄像头一天内存多少?
网络摄像头工作一天需要的存储空间主要取决于以下几个因素:
摄像机的分辨率如720P、960P、1080P等等 ;视频压缩格式,如:JPEG、MJPEG、MJPEG-4、H.264;图像的码流、帧率等因素,取决于摄像机的分辨率;录像要求被存储的最长时间。
目前市面主流摄像头工作一天所用内存约为:
1.720P的高清网络摄像机的码流为3Mbps,每小时占用存储空间约为1.32GB,一天约31.68GB。
2.960p的高清网络摄像机的码流为4Mbps,每小时占用存储空间约为1.79GB,一天约42.96GB。
3.1080P的高清网络摄像机的码流为5Mbps,每小时占用存储空间约为2.25GB,一天约54GB。
扩展资料:网络摄像头基本参数:
微电脑处理器32Bit RSIC Embedded Processor
操作系统嵌入式Linux系统
视频压缩方式Motion-JPEG
信号系统PAL 或 NTSC
帧频率–>25fps
分辨率PAL:VGA(640*480), SIF(320*240), QSIF(160*120)
网络接口RJ45, 10/100m自适应以太网接口支持网络协议TCP/IP,HTTP,ICMP,DHCP,FTP,SMTP,PPPoE 等支持IP地址静态IP地址、动态IP地址。