Welcome to Snooda's Blog
malloc、calloc、memset与free等内存操作的速度
[| 2012/05/30 00:55]
一直对内存操作的速度没有数值概念,只泛泛的知道memset影响效率,反复分配释放内存影响效率,具体速度如何,从来没试过,今天试验了一下。
写了个程序,分配一个指针数组,挨个分配内存,然后挨个释放。使用的是一台2核16g内存的虚拟机。gcc版本3.4.2
先是分配了1w个100字节块,发现5ms以内即可完成。
然后扩大到500字节块,速度没什么变化。
然后分配100w个字节块,平均需要270ms左右。
字节块扩大的2k左右,大概5s完成。
扩大到5k左右,大概12s左右。
以上数据均为malloc+memset数据和calloc数据,两者不相上下。
只malloc不memset,大概能缩短20%左右,可见memset对速度还是有一定影响的,不过对于性能要求不是那么严苛的程序,设置一下提高程序稳定性也是值得的。避免某变量忘记初始化出现野值的问题。
写了个程序,分配一个指针数组,挨个分配内存,然后挨个释放。使用的是一台2核16g内存的虚拟机。gcc版本3.4.2
先是分配了1w个100字节块,发现5ms以内即可完成。
然后扩大到500字节块,速度没什么变化。
然后分配100w个字节块,平均需要270ms左右。
字节块扩大的2k左右,大概5s完成。
扩大到5k左右,大概12s左右。
以上数据均为malloc+memset数据和calloc数据,两者不相上下。
只malloc不memset,大概能缩短20%左右,可见memset对速度还是有一定影响的,不过对于性能要求不是那么严苛的程序,设置一下提高程序稳定性也是值得的。避免某变量忘记初始化出现野值的问题。
OpenVZ VPS内存查看分析工具/超售检查脚本
[| 2012/04/12 02:52]
搞了一个python脚本,用来查看OpenVZ VPS内存情况的,原始数据取自/proc/user_beancounters文件,脚本内做了一个数据简单的分析提取和可视化提高的工作,已经很晚了,先搞几个基本功能出来,增强功能以后再补。
用法: python vz_checker.py /proc/user_beancounters (需要root权限)
输出内容:
filename is:[user_beancounters]
Kernel Mem Info: used:[5.723M] max_used:[35.539M] limit:[2048.000M] fail_count:[0]
Mem already allocated Info: used:[17.621M] max_used:[33.074M] limit:[96.000M] fail_count:[0]
Ram actually used: used:[8.516M] max_used:[67.820M] limit:[96.000M] fail_count:[0]
Mem (Ram + swap) used: used:[9.848M] max_used:[13.219M] limit:[96.000M] fail_count:[0]
Kernel Mem Info:占用的内核内存大小,不可被swap,主要用来存放进程数据等。
Mem already allocated Info:已分配的内存大小,limit即为burst内存大小。
Ram actually used: 实际占用的物理内存大小。
Mem (Ram + swap) used: 占用的物理内存和swap大小。
如果 实际占用的物理内存 == 占用的物理内存和swap大小 那么恭喜你,你的vps里运行的程序都在内存中,主机超售不严重。
如果 实际占用的物理内存 < 占用的物理内存和swap大小 情况不妙,主机已经开始占用swap了,超售比较严重了。
另外我在测试过程中发现有一台vps实际占用物理内存大小显示比物理内存+swap总和还要大,现象很奇怪,查了一些资料没有关于这方面的说明,待后续调查。
脚本功能还比较粗糙,一些数据需要继续打磨,欢迎大家提意见~~
本文地址:http://www.snooda.com/read/263
下载地址:https://github.com/snooda/openvz_checker
用法: python vz_checker.py /proc/user_beancounters (需要root权限)
输出内容:
filename is:[user_beancounters]
Kernel Mem Info: used:[5.723M] max_used:[35.539M] limit:[2048.000M] fail_count:[0]
Mem already allocated Info: used:[17.621M] max_used:[33.074M] limit:[96.000M] fail_count:[0]
Ram actually used: used:[8.516M] max_used:[67.820M] limit:[96.000M] fail_count:[0]
Mem (Ram + swap) used: used:[9.848M] max_used:[13.219M] limit:[96.000M] fail_count:[0]
Kernel Mem Info:占用的内核内存大小,不可被swap,主要用来存放进程数据等。
Mem already allocated Info:已分配的内存大小,limit即为burst内存大小。
Ram actually used: 实际占用的物理内存大小。
Mem (Ram + swap) used: 占用的物理内存和swap大小。
如果 实际占用的物理内存 == 占用的物理内存和swap大小 那么恭喜你,你的vps里运行的程序都在内存中,主机超售不严重。
如果 实际占用的物理内存 < 占用的物理内存和swap大小 情况不妙,主机已经开始占用swap了,超售比较严重了。
另外我在测试过程中发现有一台vps实际占用物理内存大小显示比物理内存+swap总和还要大,现象很奇怪,查了一些资料没有关于这方面的说明,待后续调查。
脚本功能还比较粗糙,一些数据需要继续打磨,欢迎大家提意见~~
本文地址:http://www.snooda.com/read/263
下载地址:https://github.com/snooda/openvz_checker