cpu时间

Linux 的性能调优的思路

删除回忆录丶 提交于 2020-03-06 17:39:59
原文: https://mp.weixin.qq.com/s/wjQhl5y1bmPGsOKY4CHuEw Linux操作系统是一个开源平台,在这个平台下有无数的开源软件支撑,我们常见的apache、tomcat、mysql等。最终要实现的是通过这些开源软件的支持,以最低廉的成本,达到应用最优的性能。 因此,谈到性能问题,主要实现的是Linux操作系统和应用程序的最佳结合。 01性能问题综述 系统的性能是指操作系统完成任务的有效性、稳定性和响应速度。 Linux系统管理员可能经常会遇到系统不稳定、响应速度慢等问题,例如在Linux上搭建了一个web服务,经常出现网页无法打开、打开速度慢等现象,而遇到这些问题,就有人会抱怨Linux系统不好,其实这些都是表面现象。 操作系统完成一个任务时,与系统自身设置、网络拓朴结构、路由设备、路由策略、接入设备、物理线路等多个方面都密切相关,任何一个环节出现问题,都会影响整个系统的性能。 因此当Linux应用出现问题时,应当从应用程序、操作系统、服务器硬件、网络环境等方面综合排查,定位问题出现在哪个部分,然后集中解决。 在应用程序、操作系统、服务器硬件、网络环境等方面,影响性能最大的是应用程序和操作系统两个方面,因为这两个方面出现的问题不易察觉,隐蔽性很强。而硬件、网络方面只要出现问题,一般都能马上定位。 下面主要讲解操作系统方面的性能调优思路

Linux设备驱动程序学习(10) -时间、延迟及延缓操作

僤鯓⒐⒋嵵緔 提交于 2020-03-06 08:46:15
度量时间差 时钟中断由系统定时硬件以周期性的间隔产生,这个间隔由内核根据 HZ 值来设定,HZ 是一个体系依赖的值,在 <linux/param.h>中定义或该文件包含的某个子平台相关文件中。作为通用的规则,即便如果知道 HZ 的值,在编程时应当不依赖这个特定值,而始终使用HZ。对于当前版本,我们应完全信任内核开发者,他们已经选择了最适合的HZ值,最好保持 HZ 的默认值。 对用户空间,内核HZ几乎完全隐藏,用户 HZ 始终扩展为 100。当用户空间程序包含 param.h,且每个报告给用户空间的计数器都做了相应转换。对用户来说确切的 HZ 值只能通过 /proc/interrupts 获得:/proc/interrupts 的计数值除以 /proc/uptime 中报告的系统运行时间。 对于ARM体系结构:在<linux/param.h>文件中的定义如下: #ifdef __KERNEL__ # define HZ CONFIG_HZ /* Internal kernel timer frequency */ # define USER_HZ 100 /* 用户空间使用的HZ,User interfaces are in "ticks" */ # define CLOCKS_PER_SEC (USER_HZ) /* like times() */ #else # define

CentOS7运行报错kernel:NMI watchdog: BUG: soft lockup - CPU#0 stuck for 26s

旧时模样 提交于 2020-03-06 08:41:53
CentOS内核,对应的文件是/proc/sys/kernel/watchdog_thresh。CentOS内核和标准内核还有一个地方不一样,就是处理CPU占用时间过长的函数,CentOS下是watchdog_timer_fn()函数。 如果你的内核是标准内核的话,可以通过修改/proc/sys/kernel/softlockup_thresh来修改超时的阈值 参考文献:https://zhidao.baidu.com/question/1829924822713415300.html 首先,这条信息可以输出,说明即使发生死锁或者死循环,还是有代码可以执行。第二,可以通过这个日志信息,找到对应的处理函数,这个函数所在的模块就是用来处理CPU被过度使用时用到的。所以通过这个事情,可以看到内核打印出的只言片语都有可能成为你解决问题的关键,一定要从重视这些信息,从中找出有用的东西。 我经常看的内核版本是官方的2.6.32内核,这个版本中我找到的函数是softlockup_tick(),这个函数在时钟中断的处理函数run_local_timers()中调用。这个函数会首先检查watchdog线程是否被挂起,如果不是watchdog线程,会检查当前占有CPU的线程占有的时间是否超过系统配置的阈值,即softlockup_thresh。如果当前占有CPU的时间过长

报错kernel:NMI watchdog: BUG: soft lockup - CPU#0 stuck for 26s

情到浓时终转凉″ 提交于 2020-03-06 08:40:59
近期在服务器跑大量高负载程序,造成cpu soft lockup。如果确认不是软件的问题。 解决办法: #追加到配置文件中 echo 30 > /proc/sys/kernel/watchdog_thresh #查看 [root@git-node1 data]# tail -1 /proc/sys/kernel/watchdog_thresh 30 #临时生效 sysctl -w kernel.watchdog_thresh=30 #内核软死锁(soft lockup)bug原因分析 Soft lockup名称解释:所谓,soft lockup就是说,这个bug没有让系统彻底死机,但是若干个进程(或者kernel thread)被锁死在了某个状态(一般在内核区域),很多情况下这个是由于内核锁的使用的问题。 vi /etc/sysctl.confkernel.watchdog_thresh=30 参考文章: CentOS内核,对应的文件是/proc/sys/kernel/watchdog_thresh。CentOS内核和标准内核还有一个地方不一样,就是处理CPU占用时间过长的函数,CentOS下是watchdog_timer_fn()函数。 如果你的内核是标准内核的话,可以通过修改/proc/sys/kernel/softlockup_thresh来修改超时的阈值 参考文献

线上centos6出现软死锁 kernel:BUG: soft lockup

半腔热情 提交于 2020-03-06 08:08:21
线上centos6出现软死锁 kernel:BUG: soft lockup 今天线上一台centos6机器用xshell一直连接不上,然后在xshell上显示 Message from syslogd@GZxxx at Mar 29 14:13:14 ... kernel:BUG: soft lockup - CPU#1 stuck for 68s! [events/1:36] 过了10分钟,终于可以连上了,看一下开机日志 dmesg |grep stuck BUG: soft lockup - CPU#2 stuck for 67s! [vmmemctl:894] BUG: soft lockup - CPU#5 stuck for 67s! [bdi-default:49] BUG: soft lockup - CPU#3 stuck for 67s! [irqbalance:1351] BUG: soft lockup - CPU#4 stuck for 67s! [swapper:0] BUG: soft lockup - CPU#6 stuck for 67s! [watchdog/6:30] BUG: soft lockup - CPU#5 stuck for 67s! [vmmemctl:894] BUG: soft lockup - CPU#0 stuck for

Operating Systems: Three Easy Pieces: CPU虚拟化作业

≡放荡痞女 提交于 2020-03-06 01:25:40
模拟进程状态转换 1.作业包: process-run.py 2.作业说明: 3.作业要求: (1)Run process-run.py with the following flags:-l5:100,5:100. 参数 -l PROCESS_LIST :逗号分隔的进程列表,形式是 X1:Y1,X2:Y2,... ,其中X代表进程指令数,Y(0~100)代表运行指令还是声明I/O请求 该命令运行进程0,运行5条指令,且每条指令的CPU占用率为100%,此时进程1处于就绪状态,进程0运行完毕,CPU运行进程1,执行同样操作,总用时10单位时间。 (2) Now run with these flags: ./process-run.py -l 4:100,1:0. 该命令运行进程0,运行4条指令,且每条指令的CPU占用率为100%,之后进程1发出I/O请求,CPU阻塞该进程,I/O执行3单位时间,CPU解除进程1的阻塞状态,进程1执行完成操作,总用时10单位时间。 (3) Switch the order of the processes: -l 1:0,4:100. 该命令运行进程0发出I/O请求,CPU阻塞该进程,并执行I/O操作,同时CPU运行进程1,运行4条指令,且每条指令的CPU占用率为100%,4个单位时间后I/O操作和进程1均运行完成,进程0执行完成操作

线程池

孤街醉人 提交于 2020-03-05 22:38:54
线程池优势: a、降低系统资源消耗,通过重用已存在的线程,降低线程创建和销毁造成的消耗; b、提高系统响应速度,当有任务到达时,通过复用已存在的线程,无需等待新线程的创建便能立即执行; c、方便线程并发数的管控。因为线程若是无限制的创建,可能会导致内存占用过多而产生OOM,并且会造成cpu过度切换(cpu切换线程是有时间成本的(需要保持当前执行线程的现场,并恢复要执行线程的现场)); d、提供更强大的功能,延时定时线程池; 线程池的主要参数: public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue) { this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, Executors.defaultThreadFactory(), defaultHandler); } a、corePoolSize(线程池基本大小):当向线程池提交一个任务时,若线程池已创建的线程数小于corePoolSize,即便此时存在空闲线程,也会通过创建一个新线程来执行该任务

根据CPU核心数确定线程池并发线程数

浪尽此生 提交于 2020-03-05 17:46:53
一、抛出问题 关于如何计算并发线程数,一般分两派,来自两本书,且都是好书,到底哪个是对的?问题追踪后,整理如下: 第一派:《Java Concurrency in Practice》即《java并发编程实践》,如下图: 如上图,在《Java Concurrency in Practice》一书中,给出了估算线程池大小的公式: Nthreads=Ncpu*Ucpu*(1+w/c) ,其中 Ncpu=CPU核心数 Ucpu=cpu使用率,0~1 W/C=等待时间与计算时间的比率 第二派:《Programming Concurrency on the JVM Mastering》即《Java 虚拟机并发编程》 线程数=Ncpu/(1-阻塞系数) 二、分析 对于派系一,假设cpu100%运转,即撇开CPU使用率这个因素,线程数 =Ncpu*(1+w/c)。 现在假设将派系二的公式等于派系一公式,即 Ncpu/(1-阻塞系数)= Ncpu*(1+w/c) ,===》 阻塞系数=w/(w+c),即阻塞系数=阻塞时间/(阻塞时间+计算时间),这个结论在派系二后续中得到应征,如下图: 由此可见,派系一和派系二其实是一个公式......这样我就放心了...... 三、实际应用 那么实际使用中并发线程数如何设置呢?分析如下(我们以派系一公式为例): Nthreads=Ncpu*(1+w/c)

多线程编程bug起源分析

冷暖自知 提交于 2020-03-05 16:20:30
一、多线程的起源 对于软件工程师,整个代码执行的过程中主要关注CPU、内存和I/O这三个方面;在计算机快速发展的阶段,主要是这三个方面在快速发展;但这三方面一直存在这一个严重的矛盾,即运行速度;CPU的运行速度是是最快的,内存次之,IO是最慢的;举个例子来说,CPU是天上一天,内存就是地上一年。若内存是天上一天,IO就是地上十年; 根据木桶理论,限制程序运行速度的是IO。每次在执行IO操作时,CPU都会被闲置;为了最高效的利用CPU的计算资源,平衡这三者的速度差异。计算机体系结构、操作系统和编译程序都做了平衡,主要体现在以下三点: 1、为了均衡CPU和内存的速度差异,给CPU配置专门的缓存; 2、操作系统增加了线程和进程。以分时复用CPU来平衡CPU与IO的时间差; 3、编译程序优化指令执行次序,确保缓存可以被合理的使用; 二、多线程BUG源头 1、缓存导致的可见性问题 1)在单核CPU的时代,所有的线程都是操作同一个CPU的缓存,所以对于所有的线程来说,CPU的缓存都是共享且可见的;但在多核CPU的时代,每个CPU都会有自己的缓存,不同的线程被分配到不同的CPU。就会导致多个线程在不同的CPU缓存中操作同一个变量时,该变量在每一个缓存中都是只对操作该CPU的线程可见,对其它CPU对应的线程是不可见的。不能保证该变量的强一致性; 代码示例: public class Test1 {

网络编程py

徘徊边缘 提交于 2020-03-05 15:13:10
概念 day27 ​ 网络架构 ​ C/S :qq 微信 浏览器 英雄联盟 穿越火线 王者荣耀 安装 ​ C:client 客户端 ​ S:server 服务端 ​ B/S :百度 淘宝 码云 只要在浏览器输入网址就可以直接使用了 ​ B:browser 浏览器 ​ S:server 服务端 ​ B/S更好: 更节省资源 不用更新 不依赖环境 ​ 统一了所有web程序的入口 ​ C/S架构: 安全性 程序比较庞大 ​ 移动端 ​ app ​ 微信小程序 : 统一了所有web程序的入口 ​ 支付宝 : 统一了所有和钱相关的事儿 ​ mac ​ 是一个物理地址 ​ 唯一的标识你的网络设备 ​ ip 地址 ​ 是一个逻辑地址 ​ 是可以根据你的位置变化发生改变的 ​ 能够在广域网中快速的定位你 ​ ipv4地址: ​ 4为点分十进制 ​ 0.0.0.0-255.255.255.255 ​ 2**32 ​ 公网和内网: ​ 公网 0.0.0.0-255.255.255.255(不包含保留字段的ip) 你能够在任意一 个地方去访问的ip地址 ​ 内网 所有的内网ip都要使用保留字段 只能在一个区域内使用,出了 这个区域就用不了了 192.168.0.0 - 192.168.255.255 10.0.0.0 - 10.255.255.255 172.16.0.0 - 172.32.255