http://www.blogjava.net/fjzag/articles/317773.html

ubuntu@ubuntu-vm:/work/sv-g5-application/projects/sysmonitor/src$ cat SVPSysMonitor.cpp
/*################################################################################################## Company : Huizhou Desay SV Automotive Co., Ltd. Division : Automotive Electronics, Desay Corporation Business Unit : Central Technology Department : Advanced Development (Huizhou) Project : G5 Platform Module : System Monitor Create Date : Nov 03, 2016 - Liu Chuqun <Chuqun.Liu@desay-svautomotive.com> Update Date : ##################################################################################################*/ #include "SVPType.h"
#include "SVPTime.h"
#include "SVPLog.h" #ifdef SVP_LOG_TAG
#undef SVP_LOG_TAG
#endif
#define SVP_LOG_TAG "sysmonitor" #define NAME_LEN 64
#define BUFFER_LEN 1024 static SVPChar g_name[NAME_LEN] = { };
static SVPChar g_buffer[BUFFER_LEN] = { };
static SVPInt32 g_cpuPercent = ;
static SVPInt32 g_memPercent = ;
static SVPInt32 g_memTotal = ;
static SVPInt32 g_memFree = ;
static SVPInt32 g_memAvailable = ;
static SVPInt32 g_topCPU = ;
static SVPInt32 g_topMemUse = ; void GetCPUInfo();
void GetMemInfo();
void PrintInfo();
void MonitorStrategy();
SVPVoid ResetSystem(); SVPInt32 main(SVPInt32 argc, SVPChar* argv[])
{
while()
{
GetCPUInfo();
GetMemInfo();
PrintInfo();
MonitorStrategy();
sleep();
} return ;
} void MonitorStrategy()
{
SVPUlong ulCurStrategyTickCount = SVPTime::GetTickCount();
if (ulCurStrategyTickCount <= )
return;// 开机30秒内不执行策略。 static SVPBool s_bInLimitMode = SVP_FALSE;
static SVPUlong s_ulEnterLimitModeTime = ;
static SVPUlong s_ulLimitModeCheckCount = ;
if (g_cpuPercent >= )
{
++s_ulLimitModeCheckCount;
if (SVP_FALSE == s_bInLimitMode)
{
s_bInLimitMode = SVP_TRUE;
s_ulEnterLimitModeTime = ulCurStrategyTickCount;
} if (ulCurStrategyTickCount - s_ulEnterLimitModeTime >= )
{
SVP_INFO("s_ulLimitModeCheckCount[%lu]", s_ulLimitModeCheckCount);
if (s_ulLimitModeCheckCount >= )
ResetSystem();
}
}
else
{
s_bInLimitMode = SVP_FALSE;
s_ulLimitModeCheckCount = ;
}
} void PrintInfo()
{
SVP_INFO("[TopMem:%3d%%, TopCPU:%3d%%] MemTotal:%dKB, MemAvailable:%dKB, MEM:%3d%%, CPU:%3d%%.", g_topMemUse, g_topCPU, g_memTotal, g_memAvailable, g_memPercent, g_cpuPercent);
static SVPInt32 printCount = ;
++printCount;
if (printCount >= )
{
printCount = ;
system("ps");
usleep();
system("top -n1;ls /media");
}
} void GetCPUInfo()
{//获取cpu占用率
FILE *fp = fopen("/proc/stat", "r");
if (fp)
{
memset(g_name, , NAME_LEN);
memset(g_buffer, , BUFFER_LEN);
static SVPInt32 idle0 = , total0 = ;
SVPInt32 user1, nice, sys, idle1, iowait, irq, softirq, total1 = ; fgets(g_buffer, sizeof(g_buffer), fp);
sscanf(g_buffer, "%s %d %d %d %d %d %d %d", g_name, &user1, &nice, &sys,
&idle1, &iowait, &irq, &softirq); total1 = user1 + nice + sys + iowait + irq + softirq + idle1;
if (total1 != total0)
g_cpuPercent = - ( ((idle1 - idle0) * )/ (double) (total1 - total0) );
else
SVP_WARN("cpu total is the same. /proc/stat maybe error!"); idle0 = idle1;
total0 = total1; if (g_cpuPercent > g_topCPU)
g_topCPU = g_cpuPercent; fclose(fp);
}
else
{
SVP_ERROR("fopen /proc/stat failed:%s", strerror(errno));
}
} void GetMemInfo()
{//获取内存信息
FILE *fp = fopen("/proc/meminfo", "r");
if (fp)
{
memset(g_name, , NAME_LEN);
memset(g_buffer, , BUFFER_LEN);
SVPChar unit[] = { };
fgets(g_buffer, sizeof(g_buffer), fp);
sscanf(g_buffer, "%s %d %s", g_name, &g_memTotal, unit); fgets(g_buffer, sizeof(g_buffer), fp);
sscanf(g_buffer, "%s %d %s", g_name, &g_memFree, unit); fgets(g_buffer, sizeof(g_buffer), fp);
sscanf(g_buffer, "%s %d %s", g_name, &g_memAvailable, unit); if (g_memTotal)
g_memPercent = - ( * g_memAvailable) / g_memTotal;
else
SVP_WARN("mem total is 0!"); if (g_memPercent > g_topMemUse)
g_topMemUse = g_memPercent; fclose(fp);
}
else
{
SVP_ERROR("fopen /proc/meminfo failed:%s", strerror(errno));
}
} SVPVoid ResetSystem()
{
system("top -n1;ls /media");
SVP_WARN("restart system now ...");
SVPUint8 tryTimes = ;
while(tryTimes < )
{
++tryTimes;
if (- != system("powerctrl 10 &"))
break;
else
SVP_ERROR("reboot system fail!");
sleep();
} //最后一招。
//需要radio软件修改逻辑为:任何时候,只要收到first connect消息,就走core重新启动的逻辑。不要再过滤first connect消息。
sleep();
SVP_ERROR("can't restart system through the spi msg!");
tryTimes = ;
while(tryTimes < )
{
++tryTimes;
if (- != system("reboot -f &"))
break;
else
SVP_ERROR("reboot system fail!");
sleep();
}
}

内存和cpu的更多相关文章

  1. Ambari server:无法显示内存,CPU等使用率

    Ambari server安装完毕后,都能正确显示各种信息.运行了几天后,发现无法显示内存,CPU等信息. 查找日志发现有错误,日志路径:/var/log/ambari-server/ambari-s ...

  2. C#实现对远程服务器的内存和CPU监控

    C#实现对远程服务器的内存和CPU监控小记 1.  主要使用到的组件有System.Management.dll 2.  主要类为 :ManagementScope 连接远程服务器示例代码: priv ...

  3. YARN的内存和CPU配置

    时间 2015-06-05 00:00:00  JavaChen's Blog 原文  http://blog.javachen.com/2015/06/05/yarn-memory-and-cpu- ...

  4. Spark Tungsten揭秘 Day4 内存和CPU优化使用

    Spark Tungsten揭秘 Day4 内存和CPU优化使用 今天聚焦于内存和CPU的优化使用,这是Spark2.0提供的关于执行时的非常大的优化部分. 对过去的代码研究,我们会发现,抽象的提高, ...

  5. 系统内存和CPU管理、监控

    本博文的主要内容有 .系统内存管理.监控:vmstat和free -mt .系统CPU管理.监控:sar -u.mpstat.uptime linux系统内存和CPU是在系统运行的过程中不断消耗的资源 ...

  6. 查看linux/AIX系统内存及CPU占用百分比

    1.linux下查看CPU及内存占用情况 查看内存占用百分比: [root@rusky ~]# free -m | sed -n '2p' | awk '{print "used mem i ...

  7. 转---高并发Web服务的演变——节约系统内存和CPU

    [问底]徐汉彬:高并发Web服务的演变——节约系统内存和CPU 发表于22小时前| 4223次阅读| 来源CSDN| 22 条评论| 作者徐汉彬 问底Web服务内存CPU并发徐汉彬 摘要:现在的Web ...

  8. Chrome 内存和CPU消耗量双料冠军

    今天统计了下某个时刻各进程的内存和CPU使用概况.结果发现,Chrome消耗量真是不一般的大.比Windows主进程都还猛! 另外发现百度安全卫士占用CPU也比较猛. powershell下输入: p ...

  9. 解决持久化数据太大,单个节点的硬盘无法存储的问题;解决运算量太大,单个节点的内存、CPU无法处理的问题

    需要学习的技术很多,要自学新知识也不是一件容易的事,选择一个自己比较感兴趣的会是一个比较好的开端,于是,打算学一学分布式系统. 带着问题,有目的的学习,先了解整体架构,在深入感兴趣的细节,这是我的计划 ...

  10. 【原创】大叔经验分享(21)yarn中查看每个应用实时占用的内存和cpu资源

    在yarn中的application详情页面 http://resourcemanager/cluster/app/$applicationId 或者通过application命令 yarn appl ...

随机推荐

  1. RAP2环境搭建整理(超详细)

    RAP2是阿里开源的接口管理平台,最近搭建了一下,将部署文档整理如下: 如果途中遇坑会在文章末尾记录下来嘻嘻 首先,确定环境是否部署好. RAP2所需的环境为: node.js 8.9.4+ mysq ...

  2. FU-A方式分包

    当 NALU 的长度超过 MTU 时, 就必须对 NALU 单元进行分片封包. 也称为 Fragmentation Units (FUs).  0 1  2 3 0 1 2 3 4 5 6 7 8 9 ...

  3. lintcode: Missing String

    Missing String  描述: Given two strings, you have to find the missing string. Have you met this questi ...

  4. [Clr via C#读书笔记]Cp8方法

    Cp8方法 构造器 作用就是初始化所有成员字段:.ctor:派生类和基类都有自己的构造函数.默认有一个无参数的构造函数,值字段初始化为0,引用字段初始化为null:可以有多个构造器: 值类型的初始化其 ...

  5. Java进阶知识点:更优雅地关闭资源 - try-with-resource

    一.背景 我们知道,在Java编程过程中,如果打开了外部资源(文件.数据库连接.网络连接等),我们必须在这些外部资源使用完毕后,手动关闭它们.因为外部资源不由JVM管理,无法享用JVM的垃圾回收机制, ...

  6. django 连接mysql报错

    原因: 问题1. 即从mysql5.7版本之后,默认采用了caching_sha2_password验证方式. 问题2.  然后在执行 python manage.py makemigrations依 ...

  7. 清橙 A1318 加强版:Almost

    题意: 直接看题面吧 原版:\(n \leq 1e5, q \leq 3e4, TL 5s, ML 256G\) 加强版1:\(n,q \leq 1.5e5, TL 5s, ML 256G\) 加强版 ...

  8. Python3 Tkinter-PaneWindow

    1.向PanedWindow中添加Pane from tkinter import * root=Tk() panes=PanedWindow(orient=VERTICAL) panes.pack( ...

  9. 自测之Lesson14:多线程编程

    题目:创建一个线程,并理清主线程结束时会发生什么. 代码: #include <stdio.h> #include <pthread.h> #include <unist ...

  10. oracle数据库之PL/SQL 流程控制语句

    介绍 PL/SQL 的流程控制语句, 包括如下三类: 1.控制语句: IF 语句 2.循环语句: LOOP 语句, EXIT 语句 3.顺序语句: GOTO 语句, NULL 语句 一 条件语句 IF ...