内存和cpu

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

[email protected]:/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 <[email protected]>

    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] = { 0 };
static SVPChar g_buffer[BUFFER_LEN] = { 0 };
static SVPInt32 g_cpuPercent = 0;
static SVPInt32 g_memPercent = 0;
static SVPInt32 g_memTotal = 0;
static SVPInt32 g_memFree = 0;
static SVPInt32 g_memAvailable = 0;
static SVPInt32 g_topCPU = 0;
static SVPInt32 g_topMemUse = 0;

void GetCPUInfo();
void GetMemInfo();
void PrintInfo();
void MonitorStrategy();
SVPVoid ResetSystem();

SVPInt32 main(SVPInt32 argc, SVPChar* argv[])
{
    while(1)
    {
        GetCPUInfo();
        GetMemInfo();
        PrintInfo();
        MonitorStrategy();
        sleep(3);
    }

    return 0;
}

void MonitorStrategy()
{
    SVPUlong ulCurStrategyTickCount = SVPTime::GetTickCount();
    if (ulCurStrategyTickCount <= 30000)
        return;// 开机30秒内不执行策略。

    static SVPBool s_bInLimitMode = SVP_FALSE;
    static SVPUlong s_ulEnterLimitModeTime = 0;
    static SVPUlong s_ulLimitModeCheckCount = 0;
    if (g_cpuPercent >= 100)
    {
        ++s_ulLimitModeCheckCount;
        if (SVP_FALSE == s_bInLimitMode)
        {
            s_bInLimitMode = SVP_TRUE;
            s_ulEnterLimitModeTime = ulCurStrategyTickCount;
        }

        if (ulCurStrategyTickCount - s_ulEnterLimitModeTime >= 90000)
        {
            SVP_INFO("s_ulLimitModeCheckCount[%lu]", s_ulLimitModeCheckCount);
            if (s_ulLimitModeCheckCount >= 30)
                ResetSystem();
        }
    }
    else
    {
        s_bInLimitMode = SVP_FALSE;
        s_ulLimitModeCheckCount = 0;
    }
}

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 = 0;
    ++printCount;
    if (printCount >= 60)
    {
        printCount = 0;
        system("ps");
        usleep(100000);
        system("top -n1;ls /media");
    }
}

void GetCPUInfo()
{//获取cpu占用率
    FILE *fp = fopen("/proc/stat", "r");
    if (fp)
    {
        memset(g_name, 0, NAME_LEN);
        memset(g_buffer, 0, BUFFER_LEN);
        static SVPInt32 idle0 = 0, total0 = 0;
        SVPInt32 user1, nice, sys, idle1, iowait, irq, softirq, total1 = 0;

        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 = 100 - ( ((idle1 - idle0) * 100)/ (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, 0, NAME_LEN);
        memset(g_buffer, 0, BUFFER_LEN);
        SVPChar unit[10] = { 0 };
        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 = 100 - (100 * 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 = 0;
    while(tryTimes < 3)
    {
        ++tryTimes;
        if (-1 != system("powerctrl 10 &"))
            break;
        else
            SVP_ERROR("reboot system fail!");
        sleep(1);
    }

    //最后一招。
    //需要radio软件修改逻辑为:任何时候,只要收到first connect消息,就走core重新启动的逻辑。不要再过滤first connect消息。
    sleep(5);
    SVP_ERROR("can‘t restart system through the spi msg!");
    tryTimes = 0;
    while(tryTimes < 3)
    {
        ++tryTimes;
        if (-1 != system("reboot -f &"))
            break;
        else
            SVP_ERROR("reboot system fail!");
        sleep(1);
    }
}
时间: 2024-08-05 17:59:51

内存和cpu的相关文章

KVM的基础功能(网络、内存、cpu、存储的配置)

KVM的基础功能(网络.内存.cpu.存储的配置) cpu的配置 1)查看cpu插槽数量 [[email protected] ~]# cat /proc/cpuinfo |grep "physical id" |wc -l 24 2)查看cpu核心数量 [[email protected] ~]# cat /proc/cpuinfo |grep "core id"| wc -l 24 3)查看cpu的模型 [[email protected] ~]# cat /p

Android内存和Cpu性能测试

Android内存限制java虚拟机有内存使用上限的限制 adb shell进入手机,这此参数被纪录在/system/build.prop中,如果想直接查看可以使用adb shell getprop 单个应用程序最大内存限制,超过这个值会产生OOMdalvik.vm.heapgrowthlimit 应用启动后分配的初始内存dalvik.vm.heapstartsize 单个java虚拟机最大的内存限制,超过这个值会产生OOMdalvik.vm.heapsize 小米2S的一些内存限制 #查看单个

zabbix自动发现与监控内存和CPU使用率最高的进程

监控需求 某项目的应用服务器CPU和内存使用率的监控,通过zabbix系统监控记录应用服务器上进程的CPU和内存的使用情况,并以图表的形式实时展现,以便于我们分析服务器的性能瓶颈. 监控方式 利用zabbix监控系统的自动发现功能,首先编写shell脚本获取服务器的CPU和内存资源使用率最大的进程,以json的格式输出,然后对这些进程的CPU和内存资源使用情况进行监控.(本文监控的进程为Linux服务器中资源使用率最高的10个进程.) 缺点 不适用于监控固定的进程 首先使用top命令查看进程状态

docker内存及cpu限制(不断总结中)

在一台物理机上启动了多个docker容器时,就需要对内存及cpu做出相关的限制,以达到容器互不影响的目的 限制内存:-m选项 注:限制内存后进入容器中(free -m)查看内存,显示的内存为物理机的内存 [[email protected] ~]# docker run -d -p 80 -m 200m --name nginx nginx b1086dbc4e4a4230c6289d99230c8a6a37e9e28e993678303cb97acd7faa6a09 [[email prote

如何使用JVisualVM远程监控和优化Tomcat和Java程序的内存和CPU

如何使用VisualVM远程监控和优化Tomcat和Java程序的内存和CPU JVisualVM 是Java 继 JConsole 之后有一款力作,是集成了诸多分析和优化Java程序的工具的工具. 我们可以用它来为优化Java程序的内存占用,找出内存泄漏,分析Java程序的CPU占用情况,根据JVisualVM获取到的数据优化JVM配置等.   总之是相当好了~~~~ JVisualVM 位于JAVA_HOME/bin目录下 . 直接运行可打开. 打开后界面如下: 由于JVisualVM 本身

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

[问底]徐汉彬:高并发Web服务的演变——节约系统内存和CPU 发表于22小时前| 4223次阅读| 来源CSDN| 22 条评论| 作者徐汉彬 问底Web服务内存CPU并发徐汉彬 摘要:现在的Web系统面对的并发连接数在近几年呈现指数增长,高并发成为了一种常态,给Web系统带来不小的挑战.一味地通过增加机器来解决并发量的增长,成本是非常高昂的.结合技术优化方案,才是更有效的解决方法. [导读] 徐汉彬曾在阿里巴巴和腾讯从事4年多的技术研发工作,负责过日请求量过亿的Web系统升级与重构,目前在小

使用gawk记录一段时间内,某个进程占用内存和CPU的情况

很多时候,我们在后台测试程序的时候,都需要隔一段时间监控程序的内存和CPU占用情况,但是又不能经常盯着top命令的输出. 这时候就需要使用脚本来帮我们记录这些信息,方便我们监控了. 废话不多说,直接上代码: ```shell #!/bin/bash FileName="res.txt" echo "%CPU\t%MEM" > $FileName for (( i = 0; i < 10; i++ )) do output=`top -n 1 -p 1 &

YARN的内存和CPU配置

Hadoop YARN同时支持内存和CPU两种资源的调度,本文介绍如何配置YARN对内存和CPU的使用. YARN作为一个资源调度器,应该考虑到集群里面每一台机子的计算资源,然后根据application申请的资源进行分配Container.Container是YARN里面资源分配的基本单位,具有一定的内存以及CPU资源. 在YARN集群中,平衡内存.CPU.磁盘的资源的很重要的,根据经验,每两个container使用一块磁盘以及一个CPU核的时候可以使集群的资源得到一个比较好的利用. 内存配置

Spark On YARN内存和CPU分配

本篇博客参考:http://blog.cloudera.com/blog/2015/03/how-to-tune-your-apache-spark-jobs-part-2/ 软件版本: CDH:5.7.2,JDK:1.7: 问题描述: 在使用Spark On YARN时(无论是Client模式或者是Cluster模式,当然下面会有这种模式的对比区别),可以添加诸如: --executor-memory 8G --executor-cores 5 --num-executors 20 等等这样的

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

C#实现对远程服务器的内存和CPU监控小记 1.  主要使用到的组件有System.Management.dll 2.  主要类为 :ManagementScope 连接远程服务器示例代码: 1 private const string PROPERTY_CAPACITY = "Capacity"; 2 private const string PROPERTY_AVAILABLE_BYTES = "AvailableBytes"; 3 private const