cpu时间

linux-进程管理

柔情痞子 提交于 2020-03-25 15:42:36
进程管理 查看进程 进程控制 作业控制 进程优先级 ====================================== ps process snapshot 查看当前终端上运行的进程 #ps #ps aux #ps auxf a 只能查看所有终端进程 u 显示进程拥有者 x 显示系统内所有进程 f 显示进程之间的父子关系(使用pstree查看更详细的父子关系) user 进程拥有者 pid process identify TTY 进程在哪个终端运行 查看tty的方法: #tty ? 表示这个进程开启的时候没有占用终端 time 进程占用cpu的总时间 cmd 进程名称 %cpu 进程占用的cpu百分比 %mem 进程占用memory百分比 VSZ 进程占用的虚拟内存大小 RSS 占用的物理内存大小 STAT 当前进程状态 #man ps R running S sleep T stop Z zombie(僵死,僵尸) D Uninterruptible sleep (usually IO) R Running or runnable (on run queue) S Interruptible sleep (waiting for an event to complete) T Stopped, either by a job control signal or

线程数,射多少更舒适?

心已入冬 提交于 2020-03-25 02:49:25
3 月,跳不动了?>>> 我相信大家都用过线程池,但是线程池数量设置为多少比较合理呢? 线程数的设置的最主要的目的是为了充分并合理地使用 CPU 和内存等资源,从而最大限度地提高程序的性能,因此让我们一起去探索吧! 首先要考虑到 CPU 核心数,那么在 Java 中如何获取核心线程数? 可以使用 Runtime.getRuntime().availableProcessor() 方法来获取(可能不准确,作为参考) 在确认了核心数后,再去判断是 CPU 密集型任务还是 IO 密集型任务: CPU 密集型任务:比如像加解密,压缩、计算等一系列需要大量耗费 CPU 资源的任务, 大部分场景下都是纯 CPU 计算 。 IO 密集型任务:比如像 MySQL 数据库、文件的读写、网络通信等任务,这类任务 不会特别消耗 CPU 资源,但是 IO 操作比较耗时,会占用比较多时间 。 在知道如何判断任务的类别后,让我们分两个场景进行讨论: CPU 密集型任务 对于 CPU 密集型计算,多线程本质上是提升多核 CPU 的利用率,所以对于一个 8 核的 CPU,每个核一个线程,理论上创建 8 个线程就可以了。 如果设置过多的线程数,实际上并不会起到很好的效果。此时假设我们设置的线程数量是 CPU 核心数的 2 倍,因为计算任务非常重,会占用大量的 CPU 资源,所以这时 CPU

如何排查用户态CPU使用率高

送分小仙女□ 提交于 2020-03-24 23:53:37
查看CPU使用 在 Linux 系统下,使用 top 命令查看 CPU 使用情况。 %Cpu(s): 0.3 us, 0.1 sy, 0.0 ni, 99.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st us(user):表示 CPU 在用户态运行的时间百分比,通常用户态 CPU 高表示有应用程序比较繁忙。典型的用户态程序有:数据库、Web 服务器等。 sy(sys):表示 CPU 在内核态运行的时间百分比(不包括中断),通常内核态 CPU 越低越好,否则表示系统存在某些瓶颈。 ni(nice):表示用 nice 修正进程优先级的用户态进程执行的 CPU 时间。nice 是一个进程优先级的修正值,如果进程通过它修改了优先级,则会单独统计 CPU 开销。 id(idle):表示 CPU 处于空闲态的时间占比,此时,CPU 会执行一个特定的虚拟进程,名为 System Idle Process。 wa(iowait):表示 CPU 在等待 I/O 操作完成所花费的时间,通常该指标越低越好,否则表示 I/O 存在瓶颈,可以用 iostat 等命令做进一步分析。 hi(hardirq):表示 CPU 处理硬中断所花费的时间。硬中断是由外设硬件(如键盘控制器、硬件传感器等)发出的,需要有中断控制器参与,特点是快速执行。 si(softirq):表示 CPU

Performance analysis of SQL Server — about CPU

天涯浪子 提交于 2020-03-24 03:16:38
--查询编译以来 cpu耗时总量最多的前50条(Total_woker_time) SELECT TOP 50 total_worker_time/1000 AS [总消耗CPU 时间(ms)], execution_count [运行次数], qs.total_worker_time/qs.execution_count/1000 AS [平均消耗CPU 时间(ms)], last_execution_time AS [最后一次执行时间], max_worker_time /1000 AS [最大执行时间(ms)], SUBSTRING(qt.text,qs.statement_start_offset/2+1, (CASE WHEN qs.statement_end_offset = -1 THEN DATALENGTH(qt.text) ELSE qs.statement_end_offset END -qs.statement_start_offset)/2 + 1) AS [使用CPU的语法], qt.text [完整语法], qt.dbid, dbname=db_name(qt.dbid), qt.objectid,object_name(qt.objectid,qt.dbid) ObjectName FROM sys.dm_exec_query_stats qs

《汇编语言(第二章)》课后小结

ε祈祈猫儿з 提交于 2020-03-24 02:22:34
通过本章的学习:了解通用寄存器,掌握字数据在寄存器中的存储,理解段的概念,了解段寄存器,掌握汇编指令mov, add和jmp的基本用法。 一个典型的CPU由运算器、控制器、寄存器等器件组成。内部总线实现CPU内部各个器件之间的联系。外部总线实现CPU和主板上其它器件的联系。本课程内容介绍基于8086CPU, 8086是Intel系列中16位微处理器,地址总线20位。 CPU字长是指CPU在单位时间内能一次处理的二进制位数。该指标反映出CPU内部运算处理的速度。而位宽是指CPU通过外部数据总线与内存之间一次能够传送的数据位。 关于ISA,一个处理器支持的指令和指令的字节级编码称为它的ISA。不同处理器“家族”系列,有不同的ISA。同一系列里也有不同类型的处理器。虽然每个厂商制造的处理器性能和复杂性不断提高,但是不同的类型在ISA级别上都保持着兼容。 指令使用注意事项,(1) 在mov和add指令中,两个操作对象的位数应一致。(2)运算时超出寄存器表示的位数的情形,例如:设(AX) = 8226H, (BX) = 8226H,执行ADD AX, BX后, (AX) =044CH,本来8226H+8226H=1044CH,舍弃高位的1,最后取044CH。 8086结构表示物理地址的障碍,8086内部的寄存器都是16位的,而外部地址总线宽度为20位

深入理解Synchronized

拥有回忆 提交于 2020-03-23 22:13:08
3 月,跳不动了?>>> 目前在Java中存在两种锁机制:synchronized和Lock,Lock接口及其实现类是JDK5增加的内容,其作者是大名鼎鼎的并发专家Doug Lea。本文并不比较synchronized与Lock孰优孰劣,只是介绍二者的实现原理。 数据同步需要依赖锁,那锁的同步又依赖谁?synchronized给出的答案是在软件层面依赖JVM,而Lock给出的方案是在硬件层面依赖特殊的CPU指令,大家可能会进一步追问:JVM底层又是如何实现synchronized的? 本文所指说的JVM是指Hotspot的6u23版本,下面首先介绍synchronized的实现: synrhronized关键字简洁、清晰、语义明确,因此即使有了Lock接口,使用的还是非常广泛。其应用层的语义是可以把任何一个非null对象作为"锁",当synchronized作用在方法上时,锁住的便是对象实例(this);当作用在静态方法时锁住的便是对象对应的Class实例,因为Class数据存在于永久带,因此静态方法锁相当于该类的一个全局锁;当synchronized作用于某一个对象实例时,锁住的便是对应的代码块。在HotSpot JVM实现中,锁有个专门的名字:对象监视器。 1. 线程状态及状态转换 当多个线程同时请求某个对象监视器时,对象监视器会设置几种状态用来区分请求的线程:

利用net-snmp读取windows,linux,snmp设备数据(cpu,内存,网卡)

孤街浪徒 提交于 2020-03-23 17:17:30
首先编译的时候configure参数加上--with-mib-modules='ucd-snmp/diskio ip-mib/ipv4InterfaceTable' 默认的配置没有这些模块,需要加上 make;make install后,使用命令net-snmp-config --snmpconfpath查看配置文件的目录 然后修改snmp.conf,添加 mibs +ALL 修改snmpd.conf,在rocommunity public default -V systemonly,把 -V systemonly去掉。这是设置权限,去掉后为能访问全部 假设community为public snmpwalk -v 2c -c public localhost 这时应该会出来好多好多信息 以下是Linux下一些常用的OID CPU的 Load 1 minute Load: .1.3.6.1.4.1.2021.10.1.3.1 5 minute Load: .1.3.6.1.4.1.2021.10.1.3.2 15 minute Load: .1.3.6.1.4.1.2021.10.1.3.3 CPU percentage of user CPU time: .1.3.6.1.4.1.2021.11.9.0 raw user cpu time: .1.3.6.1.4.1.2021.11

如何合理地估算线程池大小?

回眸只為那壹抹淺笑 提交于 2020-03-23 16:21:56
3 月,跳不动了?>>> 如何合理地估算线程池大小? 这个问题虽然看起来很小,却并不那么容易回答。大家如果有更好的方法欢迎赐教,先来一个天真的估算方法:假设要求一个系统的TPS(Transaction Per Second或者Task Per Second)至少为20,然后假设每个Transaction由一个线程完成,继续假设平均每个线程处理一个Transaction的时间为4s。那么问题转化为: 如何设计线程池大小,使得可以在1s内处理完20个Transaction? <!-- more --> 计算过程很简单,每个线程的处理能力为0.25TPS,那么要达到20TPS,显然需要20/0.25=80个线程。 很显然这个估算方法很天真,因为它没有考虑到CPU数目。一般服务器的CPU核数为16或者32,如果有80个线程,那么肯定会带来太多不必要的线程上下文切换开销。 再来第二种简单的但不知是否可行的方法(N为CPU总核数): 如果是CPU密集型应用,则线程池大小设置为N+1 如果是IO密集型应用,则线程池大小设置为2N+1 如果一台服务器上只部署这一个应用并且只有这一个线程池,那么这种估算或许合理,具体还需自行测试验证。 接下来在这个文档:服务器性能IO优化 中发现一个估算公式: 最佳线程数目 = ((线程等待时间+线程CPU时间)/线程CPU时间 )* CPU数目

.NET线程机制(一) 线程基础

蹲街弑〆低调 提交于 2020-03-23 14:49:32
线程作用及开销   早期计算机一次只能运行一个程序,长时间执行程序容易出现计算机“瘫痪”的问题,如果程序进入死循环则只能重启系统。即使计算机不崩溃,也难免让用户崩溃。为了解决这个问题,操作系统设计者设计出了进程的概念,使得每个应用程序运行在一个虚拟的内存空间中。进程中又包含多个线程,CPU则根据操作系统调度执行每个进程中的线程任务。通过线程这种对CPU的虚拟化管理方式,操作系统形成了多任务执行的机制。但与一切虚拟化机制一样,线程会产生空间和时间的开销。这其中的开销包括: 1、线程内核对象。该数据结构中包含线程上下文。Windows在x86架构CPU上为每个线程内核对象分配的空间大约为700字节,x64和IA64架构CPU分别为大约1240字节和2500字节。 2、线程环境块。占用一个内存页,包含线程的异常处理链首。当线程进入try块时,在链首插入一个节点,在线程 对出 退出try块时,删除该节点。另外线程环境块中还包括一些其他的本地储蓄数据。 3、用户模式栈。用户存储传给方法的局部变量和实参;还包含一个地址,指出当方法返回时,线程应该从什么地方开始接着执行。默认情况下每个线程的用户模式栈分配1MB内存。 4、内核模式栈。记录用户程序调用内核模式函数时函数的实参。32位系统分配12KB内存,64位系统则分配24KB。 5、DLL线程连接和线程分离通知。进程中每创建和终止一个线程时

40个Java多线程问题总结

旧城冷巷雨未停 提交于 2020-03-22 20:00:51
40个问题汇总 1、多线程有什么用? 一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了,还管它有什么用?在我看来,这个回答更扯淡。所谓"知其然知其所以然","会用"只是"知其然","为什么用"才是"知其所以然",只有达到"知其然知其所以然"的程度才可以说是把一个知识点运用自如。OK,下面说说我对这个问题的看法: (1)发挥多核CPU的优势 随着工业的进步,现在的笔记本、台式机乃至商用的应用服务器至少也都是双核的,4核、8核甚至16核的也都不少见,如果是单线程的程序,那么在双核CPU上就浪费了50%,在4核CPU上就浪费了75%。 单核CPU上所谓的"多线程"那是假的多线程,同一时间处理器只会处理一段逻辑,只不过线程之间切换得比较快,看着像多个线程"同时"运行罢了 。多核CPU上的多线程才是真正的多线程,它能让你的多段逻辑同时工作,多线程,可以真正发挥出多核CPU的优势来,达到充分利用CPU的目的。 (2)防止阻塞 从程序运行效率的角度来看,单核CPU不但不会发挥出多线程的优势,反而会因为在单核CPU上运行多线程导致线程上下文的切换,而降低程序整体的效率。但是单核CPU我们还是要应用多线程,就是为了防止阻塞。试想,如果单核CPU使用单线程,那么只要这个线程阻塞了,比方说远程读取某个数据吧,对端迟迟未返回又没有设置超时时间,那么你的整个程序在数据返回回来之前就停止运行了