昨天领导交代客户需要一个可以测试CPU性能的脚本,问题简化下就是说要做一个可以手动设置对CPU产生消耗的程序。心想哪有这种脚本,或许性能测试工具还差不多。琢磨了下,或许用死循环可以达到差不多的效果,但是单进程(单线程)造成的影响有限,因为服务器都是多个物理核心。那就是用多线程吧,手动写了个多线程demo,生成后发现线程都集中在一个CPU内工作,虽然把单个CPU搞成100%了,但是整体消耗不大(大约10%左右)。后来百度了下说得CPU绑定线程才有用,但是这方面不是一下就能熟悉的,所以还是多进程的实现较为简单。

代码很简单:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <wait.h>
/**
*@Usage: ./$0 [SUBPROCESS NUMBER]
*/
int main(int argc, char *argv[]){
pid_t pid;
int i, pn=;
if(argc==){
pn=atoi(argv[]);
}
for(i=;i<pn;i++){
pid=fork();
if(pid<=)break;
}
if(pid<){
printf("fork() error\n");
return -;
}else if(pid==){
//sub process works
for(;;);
}else{
//wait for the sub process's termination
wait(NULL);
}
return ;
}
gcc -Wall test.c -o test.o
chmod +x test.o
#启动五个子进程试试效果
./test.o

贴张图:

多线程的实现代码:

/**
*参考链接
*@http://blog.csdn.net/dodng12/article/details/8840271
*@http://fanqiang.chinaunix.net/a4/b8/20010811/0905001105.html
*@http://www.ibm.com/developerworks/cn/linux/l-cn-mthreadps/
*/
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <sched.h> void *thread(void *arg){
cpu_set_t cst;
int cpu=*((int *)arg); CPU_ZERO(&cst);
CPU_SET(cpu, &cst);
if(pthread_setaffinity_np(pthread_self(), sizeof(cst), &cst)!=){
printf("set thread affinity failed.\n");
pthread_exit(NULL);
}
for(;;);
} //gcc -Wall -lpthread thread.c -o thread.o
int main(void){
int i;
pthread_t tid[];
int cpus[]; for(i=;i<sysconf(_SC_NPROCESSORS_CONF);i++){
     //线程参数不能用公用变量传递,要确保每个参数值的地址都是被独立使用的
cpus[i]=i;
if(pthread_create(&tid[i], NULL, thread, (void *)(&cpus[i]))!=){
printf("create thread failed.\n");
return -;
}
} for(i=;i<sysconf(_SC_NPROCESSORS_CONF);i++){
pthread_join(tid[i], NULL);
}
return ;
}

消耗CPU的程序的更多相关文章

  1. 找出Java进程中大量消耗CPU

    原文:https://github.com/oldratlee/useful-shells useful-shells 把平时有用的手动操作做成脚本,这样可以便捷的使用. show-busy-java ...

  2. 逻辑读为何消耗CPU?

    在数据库系统中,经常会看到这个说法:“逻辑读很消耗CPU”,然后开始把这句话当作一个定理来使用.但是为什么“同样是读,为什么逻辑读会使用那么多CPU?” 查了一些资料,配合自己的理解,有下面几点体会: ...

  3. 性能测试分析过程(三)linux下查看最消耗CPU/内存的进程

    linux下查看最消耗CPU  内存的进程 1.CPU占用最多的前10个进程:  ps auxw|head -1;ps auxw|sort -rn -k3|head -10  2.内存消耗最多的前10 ...

  4. 使用top工具,找出消耗CPU 较多的进程

    1.使用top工具,找出消耗CPU 较多的进程 [oracle@cuug ~]$ top top - 10:48:27 up 23:15,  4 users,  load average: 1.09, ...

  5. 消耗CPU和内存的脚本

    用法 ./shell.sh 4 (4为4内核) 查看cpu内核数量 > lscpu 执行后会出现一堆kill命令,方便kill掉进程 #!/bin/bash endless_loop() { e ...

  6. [转帖]关于CPU Cache -- 程序猿需要知道的那些事

    关于CPU Cache -- 程序猿需要知道的那些事 很早之前读过作者的blog 记得作者在facebook 工作.. 还写过mysql相关的内容 大拿 本文将介绍一些作为程序猿或者IT从业者应该知道 ...

  7. Idea解决打开大文件消耗CPU问题

    dea打开大文件的时候,会导致cpu利用率变得特别高,我这边八核i7的配置下,cpu依然飙到了600%~700%,这个时候就需要修改idea的配置(下面以Ubuntu为例). 1.进入到idea安装目 ...

  8. 【转】如何快速定位JVM中消耗CPU最多的线程?

    [转]如何快速定位JVM中消耗CPU最多的线程? https://mp.weixin.qq.com/s?__biz=MzIwMzg1ODcwMw==&mid=2247487802&id ...

  9. JVM调优之Java进程消耗CPU过高

    JVM调优之Java进程消耗CPU过高 查找问题思路 1.查看cpu使用率,发现有线程cpu占用率很高  tops 咱们拿18092线程举例示范 2.查询pid对应的进程 ps -ef|grep 18 ...

随机推荐

  1. 对类对象使用new时地址分配的情况

    我们知道,string类内部的构造函数是采用new来分配地址的.当创建对象时,会调用string的构造函数,从而实质上也使用了new.那么问题来了,如果我用new再创建一个string类型的指针呢?下 ...

  2. Android相机是如何获取到图像的

    在研究zxing的过程中,脑袋中一直有个疑惑,那个相机并没有拍照,它是怎么获取图像的 带着这个疑惑查看Camera源码 Camera源码中有这样一个接口: public interface Previ ...

  3. CoreCLR源码探索(六) NullReferenceException是如何发生的

    NullReferenceException可能是.Net程序员遇到最多的例外了, 这个例外发生的如此频繁, 以至于人们付出了巨大的努力来使用各种特性和约束试图防止它发生, 但时至今日它仍然让很多程序 ...

  4. RFID智能感知摄像机推进智慧城市建设步伐

    随着智慧城市建设步伐的大力推进,各地的智慧城市建设取得了卓有成效的成果.物联网工程正在如火如荼地进行,顺应智慧城市物联网的发展大趋势,建设城市级的视频感知网,涉及治安.交通.教育等多方面综合传感应用, ...

  5. 【知识整理】惊现RecyclerView内部Bug???别急,我们慢慢解决它~

    一.写在前面 这也是久违的一整个月没有写Blog,也是由于近期给妹纸找工作,各种坑蒙拐骗,然而都没卵用.额,广大朋友们,成都需要软件测试.线上运维.产品助理的伙伴,赶紧私聊我了.这妹纸,学习能力挺好, ...

  6. bug 修复:上传库存时前端回发file_name参数丢失;

    # tmp_file = os.path.join(os.path.abspath('youcart/tmp'), json.loads(request.data).get('file_name')) ...

  7. 修改tomcat图标

    页面上加入: 1 <link rel="shortcut icon" href="favicon.ico" type="image/x-icon ...

  8. Linux获取UUID

    Linux内核提供有UUID生成接口: cat /proc/sys/kernel/random/uuid Linux上一切皆文件,不管什么程序,读取文件就能获取一个UUID.

  9. Backbox Linux简介与配置内网IP

    总体说起来,Backbox内置的工具什么的,并不是很多,但是它集成了一些用起来很棒的工具. 比如:Beef.Sqlmap.wpscan.zenmap.msf.w3af.dns嗅探等一系列工具,传说中的 ...

  10. python面向对象的编程

    self相当于在实例化类的过程中传入参数,实例化对象本身 静态方法,静态字段属于类,动态字段,动态方法输入每一个实例化的对象 类实例化的过程把一些属性,方法封装到一个实例化对象当中 动态字段,动态方法 ...