Linux下计算进程的CPU占用和内存占用的编程方法zz

https://www.cnblogs.com/cxjchen/archive/2013/03/30/2990548.html

查看RAM使用情况最简单的方法是通过/proc/meminfo。这个动态更新的虚拟文件实际上是许多其他内存相关工具(如:free / ps / top)等的组合显示。/proc/meminfo列出了所有你想了解的内存的使用情况。

进程的内存使用信息也可以通过/proc/<pid>/statm 和 /proc/<pid>/status 来查看。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>   //头文件
#include <assert.h>
int get_phy_mem(const pid_t p)
{
    char file[64] = {0};//文件名

    FILE *fd;         //定义文件指针fd
    char line_buff[256] = {0};  //读取行的缓冲区
    sprintf(file,"/proc/%d/status",p);//文件中第11行包含着

    fprintf (stderr, "current pid:%d\n", p);
    fd = fopen (file, "r"); //以R读的方式打开文件再赋给指针fd

    //获取vmrss:实际物理内存占用
    int i;
    char name[32];//存放项目名称
    int vmrss;//存放内存峰值大小
    for (i=0;i<VMRSS_LINE-1;i++)
    {
        fgets (line_buff, sizeof(line_buff), fd);
    }//读到第15行
    fgets (line_buff, sizeof(line_buff), fd);//读取VmRSS这一行的数据,VmRSS在第15行
    sscanf (line_buff, "%s %d", name,&vmrss);
    fprintf (stderr, "====%s:%d====\n", name,vmrss);
    fclose(fd);     //关闭文件fd
    return vmrss;
}

int get_rmem(pid_t p)
{
    return get_phy_mem(p);
}

int get_total_mem()
{
    char* file = "/proc/meminfo";//文件名

    FILE *fd;         //定义文件指针fd
    char line_buff[256] = {0};  //读取行的缓冲区
    fd = fopen (file, "r"); //以R读的方式打开文件再赋给指针fd

    //获取memtotal:总内存占用大小
    int i;
    char name[32];//存放项目名称
    int memtotal;//存放内存峰值大小
    fgets (line_buff, sizeof(line_buff), fd);//读取memtotal这一行的数据,memtotal在第1行
    sscanf (line_buff, "%s %d", name,&memtotal);
    fprintf (stderr, "====%s:%d====\n", name,memtotal);
    fclose(fd);     //关闭文件fd
    return memtotal;
}

float get_pmem(pid_t p)
{
    int phy = get_phy_mem(p);
      int total = get_total_mem();
      float occupy = (phy*1.0)/(total*1.0);
      fprintf(stderr,"====process mem occupy:%.6f\n====",occupy);
      return occupy;
}

原文地址:https://www.cnblogs.com/soul-stone/p/8686329.html

时间: 2024-10-07 23:17:52

Linux下计算进程的CPU占用和内存占用的编程方法zz的相关文章

Linux下如何查看高CPU占用率线程 LINUX CPU利用率计算

目录(?)[-] proc文件系统 proccpuinfo文件 procstat文件 procpidstat文件 procpidtasktidstat文件 系统中有关进程cpu使用率的常用命令 ps 命令 top命令 单核情况下Cpu使用率的计算 基本思想 总的Cpu使用率计算 计算方法 某一进程Cpu使用率的计算 计算方法 实验数据 某一线程Cpu使用率的计算 计算方法 实验数据 多核情况下cpu使用率的计算 实验一 描述 数据一 数据二 实验二 描述 数据一 数据二 主要问题 Java 系统

Linux下java进程CPU占用率高分析方法

Linux下java进程CPU占用率高分析方法 在工作当中,肯定会遇到由代码所导致的高CPU耗用以及内存溢出的情况.这种情况发生时,我们怎么去找出原因并解决. 一般解决方法是通过top命令找出消耗资源高的线程id,利用strace命令查看该线程所有系统调用 1. 通过top命令找到可疑进程PID top - 09:37:18 up 70 days, 16:29, 2 users, load average: 1.13, 1.04, 0.97 Tasks: 105 total, 1 running

linux下查看进程占用端口和端口占用进程命令

Linux下查看进程占用端口: 查看程序对应进程号:ps –ef|grep 进程名 REDHAT :查看进程号所占用的端口号:netstat –nltp|grep 进程号 ubuntu:查看进程占用端口号:netstat -anp|grep pid Linux下查看端口号所使用的进程号: 使用lsof命令: lsof –i:端口号

生产环境下JAVA进程高CPU占用故障排查

问题描述:生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高. 问题分析:1,程序属于CPU密集型,和开发沟通过,排除此类情况.2,程序代码有问题,出现死循环,可能性极大. 问题解决:1,开发那边无法排查代码某个模块有问题,从日志上也无法分析得出.2,记得原来通过strace跟踪的方法解决了一台PHP服务器CPU占用高的问题,但是通过这种方法无效,经过google搜索,发现可以通过下面的方法进行解决,那就尝试下

计算进程消费cpu和内存

Linux下没有直接可以调用系统函数知道CPU占用和内存占用.那么如何知道CPU和内存信息呢.只有通过proc伪文件系统来实现. proc伪文件就不介绍了,只说其中4个文件.一个是/proc/stat,/proc/meminfo,/proc/<pid>/status,/proc/<pid>/stat proc/stat:存放系统的CPU时间信息 该文件包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累计到当前时刻.不同内核版本中该文件的格式可能不大一致,以下通过实例来

Linux下查看进程和线程

在linux中查看线程数的三种方法 1.top -H 手册中说:-H : Threads toggle 加上这个选项启动top,top一行显示一个线程.否则,它一行显示一个进程. 2.ps xH 手册中说:H Show threads as if they were processes 这样可以查看所有存在的线程. 3.ps -mp <PID> 手册中说:m Show threads after processes 这样可以查看一个进程起的线程数. 查看进程 1. top 命令 top命令查看

Linux如何统计进程的CPU利用率

0. 为什么写这篇博客 Linux的top或者ps都可以查看进程的cpu利用率,那为什么还需要了解这个细节呢.编写这篇文章呢有如下三个原因: * 希望在脚本中,能够以过"非阻塞"的方式获取进程cpu利用率 * ps无法获得进程当前时刻的CPU利用率;top则需要至少1秒才能获得进程当前的利用率 * * 好奇 1. 如何统计进程CPU利用率 1.0 概述 在Linux的/proc文件系统,可以看到自启动时候开始,所有CPU消耗的时间片:对于个进程,也可以看到进程消耗的时间片.这是一个累计

linux下的进程管理(进程的基本了解及查看pstree,ps,pgrep命令)

Linux下的进程管理 1.什么是进程?程序是静态的文件进程是运行中的程序的一个副本进程存在生命周期(准备期,运行期,终止期)2.进程状态 状态 定义 R(TASK_RUNNING) . 可执行状态(RUNNING,READY)running:正在被处理 ready: 在排队, cpu处理进程个数有限 S(TASK_INTERRUPTIBLE) 可唤醒状态 :在cpu上使用的时间超时,此时被打入休眠状态,随着程序的调用会被唤醒 D(TASK_UNINTERRUPTIBLE) 不可唤醒状态 T(T

linux下查找进程及终止进程操作的相关命令

使用linux操作系统,难免遇到一些软件"卡壳"的问题,这时就需要使用linux下强大的kill命令来结束相关进程.这在linux系统下是极其容易的事情,你只需要kill xxx即可,这里xxx代表与此软件运行相关的进程PID号.首先,我们需要使用linux下另外一个命令ps查找与进程相关的PID号:ps aux | grep program_filter_word1)ps a 显示现行终端机下的所有程序,包括其他用户的程序.2)ps -A 显示所有程序.3)ps c 列出程序时,显示