昨天领导交代客户需要一个可以测试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. Java基础知识二次学习-- 第二章 基础语法与递归补充

    第二章 基础语法与递归补充   时间:2017年4月24日10:39:18 章节:02章_01节,02章_02节 视频长度:49:21 + 15:45 内容:标识符,关键字与数据类型 心得:由字母,下 ...

  2. DOM4J介绍与代码示例(2)-XPath 详解

    XPath 详解,总结 XPath简介 XPath是W3C的一个标准.它最主要的目的是为了在XML1.0或XML1.1文档节点树中定位节点所设计.目前有XPath1.0和 XPath2.0两个版本.其 ...

  3. Spring component-scan 的逻辑 、单例模式下多实例问题、事务失效

    原创内容,转发请保留:http://www.cnblogs.com/iceJava/p/6930118.html,谢谢 之前遇到该问题,今天查看了下 spring 4.x 的代码 一,先理解下 con ...

  4. 【Python之基本数据类型 基本运算】

    一.基本数据类型 1.字符串 类:str 方法:选中str,按住command(ctrl)+左键跳转至对应的方法 字符串常用方法归纳如下: 1)capitalize 功能:实现字符串首字母大写,自身不 ...

  5. Python教程(0)——介绍

    What's Python? Python是一种编程语言,由荷兰人Guido van Rossum于1989年,为打发无聊的圣诞节而开发的. Python的优点是语法简洁,代码量比C/C++.Java ...

  6. Scrapy的debug方式

    Scrapy不方便调试,但是为了深入学习框架内部的一些原理,有时候仅仅依靠日志是不够的.下面提供一种scrapy的debug方式 demo直接用来自官方例子来演示:https://github.com ...

  7. 06.04 html

    域名跟ip地址是绑定的看某个网站的ip地址 可以ping网址知道ip地址   最终访问的都是ip地址  每个ip地址都对应了一个空间(一块区域 要用来存储内容)网页访问的原理: 客户端电脑发动请求到服 ...

  8. 初学JVM

    最近在读周志明的<深入理解Java虚拟机:JVM高级特性与最佳实践>,从中学到了很多,有些人可能会问为什么我们要学习JVM,他有什么用?在这里我想说一下,并不是这本书是大家都推荐的说有用处 ...

  9. msf 之 webshell 提权

    首先建议一下到网上查查meterpreter的用法在看这篇文章,理解为什么要使用msf来提权(因为msf里边有个meterpreter很强大 ^_^)Metasploit 拥有msfpayload 和 ...

  10. vue init webpack-simple project 报错处理(connect ETIMEDOUT 192.30.253.112)

    Failed to download repo vuejs-templates/webpack-simple: connect ETIMEDOUT 192.30.253.113:443 Failed ...