绘制Linux/Android设备的内存动态变化趋势图
1.生成可执行文件收集动态内存数据
\hardware\qcom\memory\memory_detect.c
#include <stdio.h>
#include <linux/kernel.h>
#include <linux/unistd.h>
#include <unistd.h>
#include <sys/sysinfo.h>
#include <string.h>
#include <stdlib.h> int main(int argc,char *argv[])
{FILE * mfd;FILE * rfd; char buff[1024];long total;long avalable;long free;float memory_ratio;char name[20];char sf[7];int interval = 0;if(argc > 1){//char* 到 intinterval = (int)atoi(argv[1]);printf("arg_num : %d,interval : %d\n",argc,interval);}else{//default 60sinterval = 60;}system("rm -rf /data/memory.txt"); rfd = fopen("/data/memory.txt","ab+");sprintf(sf,"%d",interval);fwrite(sf,1,1,rfd);fclose(rfd);while(1){avalable = 0;free = 0;mfd = fopen("/proc/meminfo","r");rfd = fopen("/data/memory.txt","ab+");fgets(buff, sizeof(buff), mfd); sscanf(buff, "%s %ld", name,&total); fgets(buff, sizeof(buff), mfd); sscanf(buff, "%s %ld", name,&free); fgets(buff, sizeof(buff), mfd); sscanf(buff, "%s %ld", name,&avalable); printf("total : %ld,avalable : %ld\n",total,avalable);memory_ratio = (float)avalable/(float)total;sprintf(sf,"\n%.3f",memory_ratio); // float 到 charprintf("memory ratio:%s\n",sf);fwrite(sf,1,sizeof(sf)-1,rfd);fclose(mfd);fclose(rfd);sleep(interval);}}
Android.mk
LOCAL_PATH := $(call my-dir)# common include paths#
include $(CLEAR_VARS)
LOCAL_C_INCLUDES := $(commonIncludes)LOCAL_MODULE := memory_detect
LOCAL_MODULE_OWNER := qtiLOCAL_SRC_FILES := memory_detect.cLOCAL_CFLAGS := -D_GNU_SOURCELOCAL_PRELINK_MODULE := false
LOCAL_MODULE_TAGS := optional
LOCAL_PROPRIETARY_MODULE := true
include $(BUILD_EXECUTABLE)
之后推送到目标机,执行memory_detect 10 &
后台执行即可(每隔10s收集一次剩余内存的比率)。待收集到足够的数据后,取出内存数据/data/memory.txt
2.使用matplotlib绘制内存变化的趋势图,python的脚本memory.py如下:
import matplotlib
matplotlib.use('TkAgg')
from matplotlib import pyplot as plt
y_values = []file = open("memory.txt")
line = file.readline()
interval = int(line)
print intervalline = file.readline()
while line:line = float(line)print liney_values.append(line)line = file.readline()x_values = []
for i in range(len(y_values)):x_values.append(i*interval)plt.scatter(x_values, y_values, s=40)
plt.title("memory usage tendency", fontsize=24)
plt.xlabel("times", fontsize=14)
plt.ylabel("memory usage ratio", fontsize=14)
plt.axis([0, len(x_values*interval), 0, 1.0])
plt.tick_params(axis='both', labelsize=14)
plt.show()
说明:memory_detect进程采集的第一个数据是每次数据收集的间隔时间(单位秒)
3.查看内存变化趋势图
从上图中,能够很清晰的看出每隔2s采集的内存数据,剩余内存基本都维持在0.6左右
绘制Linux/Android设备的内存动态变化趋势图相关推荐
- Android 设备清理内存 RAM
实现思路 调用系统的killBackgroundProcesses 具体实现如下: 1.配置权限 <uses-permission android:name="android.perm ...
- android+动态地图+效果图,Android百度地图绘制圆形,圆形半径可动态变化
问题:百度地图绘制圆形,圆形半径可随进度拖动条发生改变 思路:圆形本身是一个覆盖物,可参考百度地图Demo中的OverlayDemo.java这个类进行实现.完成画圆之后,圆形半径如何随着进度条的拖动 ...
- python绘制动态变化的图_用Jupyter Noteb中的matplotlib绘制动态变化图形
我一直在寻找一个很好的解决方案,其中一个线程正在泵送数据,我们希望Jupyter笔记本不断更新图形,而不阻止任何事情.在查阅了十几个相关答案后,以下是一些发现: 小心 如果你想要一个实时的图表,不要使 ...
- Linux嵌入式设备内存问题定位
Linux嵌入式设备的内存一般都不大,可能就只有32M.64M.128M.256M.无线路由器一般以64M和128M居多.之前用的64M内存的方案,由于做海外版本,增加功能,导致了内存不足,因此总结了 ...
- 基于蓝牙与Android设备的控制系统设计
Android操作系统是Google基于开源的Linux操作系统开发的移动操作平台,由操作系统.中间件.用户界面和应用软件组成,是专门为移动终端打造的开放和完整的移动操作系统.Android软件平台包 ...
- Nature子刊 | 翟冰等造血干细胞移植中的肠道真菌菌群动态变化与临床结果分析(招聘博后、助研)...
近日,中国科学院先进技术研究院合成生物学研究所.深圳合成生物学创新研究院翟冰研究员在Nature Microbiology 杂志发表了题为"肠道真菌动态变化和近平滑念珠菌定植与造血干细胞移植 ...
- origin如何绘制多条折线_如何用origin绘制数据变化折线图
在实验中我们可能会得到一些数据,这些初始数据我们首先可以用数据统计分析软件SPSS来进行初步处理分析,得到摘要性的统计数据,如平均值和标准误的值(如果有兴趣可以看这篇文章:<用SPSS做独立样本 ...
- java如何绘制温度实时曲线_Android实现天气预报温度/气温折线趋势图
Android实现天气预报温度/气温折线趋势图 天气预报的APP应用中,难免会遇到绘制天气温度/气温,等关于数据趋势的折线或者曲线图,这类关于气温/温度的折线图,一般会有两条线,一条是高温线,一 ...
- linux内存加速硬盘缓存,linux块设备加速缓存之bcache
linux块设备加速缓存之bcache 什么是bcache 转载请注明出处:http://blog.csdn.net/liumangxiong bcache是linux内核块层cache.它使用类似S ...
- linux内存给hdd当缓存,linux块设备加速缓存之bcache [转]
转载请注明出处:http://blog.csdn.net/liumangxiong bcache是linux内核块层cache.它使用类似SSD来作为HDD硬盘的cache,从而起到加速作用. HDD ...
最新文章
- 【Accelerated C++】重点回顾
- URAL 1047 Simple Calculations
- transient-java 关键字
- nginx的root alias 指令
- [POI2008]STA-Station
- BZOJ.4553.[HEOI2016TJOI2016]序列(DP 树状数组套线段树/二维线段树(MLE) 动态开点)
- Vue 调试工具 vue-devtools 安装及使用
- JdbcTemplate 排序查询结果不一致问题
- 深入分析SQL字符串限制长度漏洞
- 项目质量监测(三)e2e test端到端测试——单元测试和端到端测试 e2e test工具-Cypress Nightwatch TeatCafe Codecov-测试结果可视化
- JAVA/JSP B2C系统介绍
- 华三s5000配置镜像接口_华为S5300交换机配置基于接口的本地端口镜像
- 做正确的事情,等着被开除
- autocad ios 虚线_autocad中画箭头、虚线绘制方法介绍
- linux卸载usb声卡,Linux alsa 声卡驱动 安装 卸载 设置默认声卡
- 在win10中,映射共享文件时,输入网络凭据总是报错
- GNU 开发工具(GNU Development Tools)
- linux修改文件图标,Gnome怎么修改应用图标icon
- 追剧人的福利来了,这几款APP让你痛快追剧
- itextsharp操作pdf删除某页
热门文章
- 几款KINECT应用
- 在cygwin下使用VC编译器
- 创建visual basic2005 数据库
- HBase 写优化之 BulkLoad 实现数据快速入库
- .NET(WinCE、WM)开发转Android开发 ——Xamarin和Smobiler对比...
- (转载)使用Maven构建多模块项目
- redis_学习_02_redis 可视化工具 Redis Desktop Manager
- SSM-Spring-04:Spring的DI的构造注入,P命名注入,和集合注入
- 这个“达芬奇”不一般!它是美国医生的好帮手
- 比特币创业公司Circle首获数字货币许可证