必威体育Betway必威体育官网
当前位置:首页 > IT技术

进程cpu占用99%排查,罪魁nanosleep的取值限制问题

时间:2019-09-07 14:11:05来源:IT技术作者:seo实验室小编阅读:85次「手机版」
 

nanosleep

文章目录

    • 背景
    • 代码模拟
    • 编译执行后输出结果
    • 分析
    • 结论

背景

某天客户反馈程序cpu占用99%,要求分析出问题,经排查发现是由于nanosleep函数使用不当导致

代码模拟

#include <time.h>
#include <stdio.h>

int count;
void do_printbuf()
{
    count++;
    printf("do print buf called %d\n",count);

}

int main()
{
    struct timespec s_time,ostime;
    s_time.tv_sec = 0;
    s_time.tv_nsec = 1000 * 1000 * 1000;//故障行
    //s_time.tv_nsec = 10 *1000*1000;
    while(1)
    {   
        do_printbuf();
        printf("tv_nsec %ld,sizeof %d\n",s_time.tv_nsec,sizeof s_time.tv_sec);
        nanosleep(&s_time,&ostime);//故障行
    }   
    return 0;
}

编译执行后输出结果

do print buf called 47938
tv_nsec 1000000000,sizeof 8
do print buf called 47939
tv_nsec 1000000000,sizeof 8
do print buf called 47940
tv_nsec 1000000000,sizeof 8
do print buf called 47941
tv_nsec 1000000000,sizeof 8
do print buf called 47942

分析

编译执行后,可以看出s_time.tv.nsec正常打印并没有发生溢出的问题,但是现象表明当tv_nsec中第一个乘数为10时程序执行缓慢,100时变的更慢一点点,1000时程序疯狂打印.

查看man 手册

       The structure timespec is  used  to  specify  Intervals  of  time  with
       nanosecond precision.  It is defined as follows:

           struct timespec {
               time_t tv_sec;        /* seconds */
               long   tv_nsec;       /* nanoseconds */
           };
       The value of the nanoseconds field must be in the range 0 to 999999999.

结论

  • timespec中tv_nsec的存在范围限制,程序没有进行范围处理导致
  • 当tv_nsec值超过999999999时,程序行为是未定义的,在不同系统,不同环境中表现不同,大多数系统表现为立即返回,不阻塞程序.

相关阅读

CPU性能排行天梯图2019 CPU天梯图2019年6月最新版

CPU一直是电脑硬件爱好者们关注的重点,一款CPU的性能如何直接决定了那个产品的定位和服务人群,天梯图2019年6月最新版集合了19年6月

linux 中的 nohup 命令(设置后台进程): nohup: ignoring

一、Linux 下使用 nohup Unix/Linux下一般比如想让某个程序在后台运行,很多都是使用 & 在程序结尾来让程序自动运行。 比如我们要

Linux : CPU Idle

CPU Idle状态可以分为很多种Idle状态,在CPU准备进入idle的时候在很多状态中进行选择以达到省电的目的。 CPU Idle相关的软件架构

操作系统原理,进程

一:操作系统原理1,   操作系统的主要功能:     一:将计算机复杂的硬件封装成一个个简单的接口,提供给应用程序或者客户使用   

windows下查看端口被占用问题的解决

在用Idea开发项目的时候会发现Tomcat的端口突然被占用了,或者在使用其他的程序时也会出现端口冲动的问题,如下图所示: 这时候我们就

分享到:

栏目导航

推荐阅读

热门阅读