cpu时间

Spark学习之路 (十二)SparkCore的调优之资源调优[转]

本小妞迷上赌 提交于 2020-01-26 17:48:23
概述 在开发完Spark作业之后,就该为作业配置合适的资源了。Spark的资源参数,基本都可以在spark-submit命令中作为参数设置。很多Spark初学者,通常不知道该设置哪些必要的参数,以及如何设置这些参数,最后就只能胡乱设置,甚至压根儿不设置。资源参数设置的不合理,可能会导致没有充分利用集群资源,作业运行会极其缓慢;或者设置的资源过大,队列没有足够的资源来提供,进而导致各种异常。总之,无论是哪种情况,都会导致Spark作业的运行效率低下,甚至根本无法运行。因此我们必须对Spark作业的资源使用原理有一个清晰的认识,并知道在Spark作业运行过程中,有哪些资源参数是可以设置的,以及如何设置合适的参数值。 Spark作业基本运行原理 详细原理见上图。我们使用spark-submit提交一个Spark作业之后,这个作业就会启动一个对应的Driver进程。根据你使用的部署模式(deploy-mode)不同,Driver进程可能在本地启动,也可能在集群中某个工作节点上启动。Driver进程本身会根据我们设置的参数,占有一定数量的内存和CPU core。而Driver进程要做的第一件事情,就是向集群管理器(可以是Spark Standalone集群,也可以是其他的资源管理集群,美团•大众点评使用的是YARN作为资源管理集群)申请运行Spark作业需要使用的资源

多线程高并发这一篇就够了不用再去别家了

微笑、不失礼 提交于 2020-01-26 14:34:10
  高伸缩性的并发编程是一种艺术,是成为高级程序员的必备知识点之一,最近总结了一下相关方面的知识。    借鉴过得博客有的我也不知道原文作业是谁 https://blog.csdn.net/qq_34337272/article/details/81072874 https://www.cnblogs.com/dolphin0520/p/3932921.html 一、线程 什么是线程? 线程是进程中单一顺序的控制流。 什么是进程? 进程是程序运行的过程。 1、进程与线程的关系: 1)线程是进程的最小执行单元; 2)一个进程中至少存在一个线程; 3)线程决定进程的生命周期 —— 一个线程启动,进程就开始执行;所有线程执行结束,这个进程执行结束; 4)多个线程共享一个进程的内存空间、一组系统资源。 2、进程与线程的区别: 1)每个进程都有自己的独立的内存空间、一组系统资源,而线程共享所属进程的内存空间、一组系统资源; 进程是独立的,同一个进程的线程是有联系的。 2)进程之间通信开销较大,线程之间通信开销较小。 3、多线程 一个进程中可以同时存在多个线程; 同一个进程中的多个线程之间可以并发执行; 多线程的执行方式:抢占式; 抢占CPU资源,计算机由CPU执行程序,只有拥有CPU资源的程序,才会被执行。 CUP资源:CUP的控制权,这个控制权具有时间性,时间长度是随机的;这段时间非常短

讲讲多线程

依然范特西╮ 提交于 2020-01-26 09:34:11
一、进程 概念: 进程就是在运行中的程序,也就是代表了程序占用的内存区域。 比如:360就是一个程序,而360运行时就有很多个进程在运行,如下图。 特点: 独立性 :进程是系统中独立存在的实体,它可以有自己 独立的资源 和自己 私有的地址空间, 没有线程本身同意的情况下,其他线程不可以直接访问此线程。 动态性 :进程与程序的区别在于,程序只是一个静态的指令集合,而进程是正在系统中活动的指令的集合,而进程加入了时间的概念,进程拥有自己的生命周期和各种不同的状态,这些概念在程序中都是不具备的。 并发性 :多个进程可以在单个处理器上并发执行,多个进程之间不会互相影响。 时间片: 时间片,即CPU分配给各个程序的时间,每个进程被分配一个时间段,称作它的时间片。即该进程允许运行的时间,使各个程序从表面上看是同时进行的。 如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程,将当前进程挂起。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换,而不会造成CPU资源浪费。当又切换到之前执行的进程,把现场恢复,继续执行。 在宏观上:我们可以同时打开多个应用程序,每个程序并行,同时运行。1/3000ns 在微观上:由于只有一个CPU,一次只能处理程序要求的一部分,如何处理公平,一种方法就是引入时间片,每个程序轮流执行。多核提高了并发能力。 二、线程 概念:

Java性能优化

こ雲淡風輕ζ 提交于 2020-01-26 07:55:10
随着系统数据量的不断增长, 访问量的不断提升, 系统的响应通常会越来越慢, 又或是编写的新的应用在性能上无法满足需求, 这个时候需要对系统的性能进行调优, 调优过程是构建高性能应用的必备过程, 也是一个相当复杂的过程, 而且涉及到了很多的方面, 硬件、操作系统、 运行环境软件以及应用本身, 要实现调优, 首先需要做的是找到性能低的根本原因, 然后才是针对性的进行调优, 本章节就来介绍下寻找性能瓶颈以及调优的一些技术上的方法。 CPU 消耗分析 当 CPU 消耗过高时, 对于多线程的 Java 应用而言, 最明显的性能影响是线程执行业务处理的速度大幅度下降。 在分析 Java 应用中什么动作造成了 CPU 的消耗时, 首先需要找到的为消耗了 较多 CPU资源的线程, 然后根据所消耗的 CPU 的类型并结合线程 dump 来找到造成 CPU 资源消耗高的具体原因。 在 linux 中, 可通过 top 或 pidstat 方式来查看进程中线程的 CPU 的消耗状况。 top 输入 top 命令后即可查看 CPU 的消耗情况, CPU 的信息在 TOP 视图的上面几行中, 图示如下: 在此需要关注的为 Cpu 那行的信息, 其中 4.0% us 表示的为用户占用了 4%的 CPU 时间,主要为所运行的应用程序对 CPU 的消耗; 8.9% sy 表示的为系统占用了 8.9%的 CPU

linux巡检三板斧 内存 磁盘 CPU

旧城冷巷雨未停 提交于 2020-01-26 04:01:00
一.查看cpu方面 1)想知道了cpu性能好不好、忙不忙可以用lscpu、uptime、top、htop。 top PID 进程id PPID 父进程id RUSER Real user name UID 进程所有者的用户id USER 进程所有者的用户名 GROUP 进程所有者的组名 TTY 启动进程的终端名。不是从终端启动的进程则显示为 ? PR 优先级 NI nice值。负值表示高优先级,正值表示低优先级 P 最后使用的CPU,仅在多CPU环境下有意义 %CPU 上次更新到现在的CPU时间占用百分比 TIME 进程使用的CPU时间总计,单位秒 TIME+ 进程使用的CPU时间总计,单位1/100秒 %MEM 进程使用的物理内存百分比 VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。 lscpu 查看cpu的详细信息 2)cpu负载 uptime 当前时间 11:24:47 系统已运行的时间 2:09 当前在线用户 2 users 平均负载:0.00, 0.01, 0.01,最近1分钟、5分钟、15分钟系统的负载 二.查看内存方面 内存够不够可以用free free -m Mem 是内存的使用情况 Swap 是交换空间的使用情况 total 总量 used 已使用量 free 可用量 shared

Nginx工作原理和优化

…衆ロ難τιáo~ 提交于 2020-01-26 02:47:54
1. Nginx的模块与工作原理 Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(location是Nginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。 Nginx的模块从结构上分为核心模块、基础模块和第三方模块: 核心模块:HTTP模块、EVENT模块和MAIL模块 基础模块:HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP Rewrite模块, 第三方模块:HTTP Upstream Request Hash模块、Notice模块和HTTP Access Key模块。 用户根据自己的需要开发的模块都属于第三方模块。正是有了这么多模块的支撑,Nginx的功能才会如此强大。 Nginx的模块从功能上分为如下三类。 Handlers(处理器模块)。此类模块直接处理请求,并进行输出内容和修改headers信息等操作。Handlers处理器模块一般只能有一个。 Filters (过滤器模块)。此类模块主要对其他处理器模块输出的内容进行修改操作,最后由Nginx输出。 Proxies (代理类模块)。此类模块是Nginx的HTTP Upstream之类的模块

linux - 服务器性能评估

╄→尐↘猪︶ㄣ 提交于 2020-01-26 01:12:21
影响Linux服务器性能的因素 cpu 内存 磁盘IO 网络IO 系统性能评估标准 影响性能因素 好 坏 糟糕 CPU user% + sys%< 70% user% + sys%= 85% user% + sys% >=90% 内存 Swap In(si)=0Swap Out(so)=0 Per CPU with 10 page/s More Swap In & Swap Out 磁盘 iowait % < 20% iowait % =35% iowait % >= 50% 其中: %user:表示CPU处在用户模式下的时间百分比。 %sys:表示CPU处在系统模式下的时间百分比。 %iowait:表示CPU等待输入输出完成时间的百分比。 swap in:即si,表示虚拟内存的页导入,即从SWAP DISK交换到RAM swap out:即so,表示虚拟内存的页导出,即从RAM交换到SWAP DISK。 系统性能分析工具 常用系统命令 Vmstat、sar、iostat、netstat、free、ps、top等 常用组合方式: 用vmstat、sar、iostat检测是否是CPU瓶颈。 用free、vmstat检测是否是内存瓶颈。 用iostat检测是否是磁盘I/O瓶颈。 用netstat检测是否是网络带宽瓶颈。 系统整体负载查询(uptime) uptime 08:21:34

高性能编程-- 1.1.4 内存屏障和CPU缓存

喜欢而已 提交于 2020-01-25 21:42:10
CPU性能优化手段 - 缓存 为了提高程序运行的性能,现代CPU在很多方面对程序进行了优化。 例如:CPU高速缓存。尽可能地避免处理器访问主内存的时间开销,处理器大多会利用缓存(cache)以提高性能。 多级缓存 : L1 Cache(一级缓存)是CPU第一层高速缓存,分为数据缓存和指令缓存。一般服务器CPU的L1缓存的容量通常在32-4096KB。 L2 由于L1级高速缓存容量的限制,为了再次提高CPU的运算速度,在CPU外部放置一高速存储器,即二级缓存。 L3 现在的都是内置的。而它的实际作用即是,L3缓存的应用可以进一步降低内存延迟,同时提升大数据量计算时处理器的性能。具有较大L3缓存的处理器提供更有效的文件系统缓存行为及较短消息和处理器队列长度。 一般是多核共享一个L3缓存 。 缓存同步协议 多CPU读取同样的数据进行缓存,进行不同的运算之后,最终写入主内存以哪个CPU为准? 在这种高速缓存回写的场景下,有一个缓存一致性协议多数CPU厂商对它进行了实现。 MESI 协议,它规定每条缓存有个状态位,同时定义了下面四个状态: 修改态(Modified) - 此cache行已被修改过(脏行),内容已不同于主存,为此cache专有; 专有态(Exclusive) - 此cache行内容同于主存,但不出现于其他cache中; 共享态(Shared) - 此cache行内容同于主存

计算机系统进程模型概念

℡╲_俬逩灬. 提交于 2020-01-25 16:24:01
计算机系统进程概念 以下进程概念内容均来自: https://www.bilibili.com/video/av16710919?p=13 、 https://blog.csdn.net/qq_40421919/article/details/85224864 与《Linux网络编程(第二版)》 首先,我们需要区分程序与进程: 狭义上说: 进程与应用程序的区别在于:应用程序作为一个静态文件存储在计算机系统的硬盘等存储空间中。而进程则是处于动态条件下由操作系统维护的系统资源管理实体。 他们之间最大的不同之处在于(狭义上): 进程是动态的,而程序是静态的; 进程有一定的生命期,而程序时是指令的集合,本身并无"运动"的含义。没有建立进程的程序不能作为1个独立单位操作系统的认可。 一个进程只能对应一个程序,一个程序可以对应多个进程。进程和程序的关系就像戏剧和剧本之间的关系。 广义上说: 进程从用户角度来看时应用程序的一个执行过程。从操作系系统核心角度来看,进程代表的是操作系统的分配的内存,CPU时间片等资源的基本单位,是为正在运行的程序提供的运行环境。 好的,在大致区别进程和程序的不同后,我们来看看进程的相关来源与其相关知识: 来源: 早期的计算机中只支持单道程序( 单道程序设计 ),因为只有一个物理程序计数器,所以所有的程序是串行执行的,即A程序运行完成,B程序才能开始运行

pytorch 踩坑之旅(1)

巧了我就是萌 提交于 2020-01-25 05:26:25
pytorh 训练过程的坑 1、报错:input type (CUDAFloatTensor) and weight type (CPUFloatTensor) should be same. 先考虑:模型没有加载到GPU上,解决module.cuda() 其次: 假设网络模型是: 修改为如下: 上面的图本身没有语法错误,而且在CPU上也能够正常运行,但是加载到GPU上的时候,在model = model.cuda()的作用下,网络其他部分已经被部署到GPU上,而encoder里面的结构还在cpu上面,所以需要改成下面的格式。经测试下面的结构可以正常运行。 2、runtimeerror:one of variables needed for gradient computation has been modified by an inplace operation… 主要是我在搭建网络架构时,在考虑特征融合时采用add的方式,所以在卷积和BN之后没有直接加relu,而是在进入下一次的卷积的时候才加上了relu,所以不能像之前 nn.ReLU(inplace=True),而是直接nn.ReLU()。 inplace=True 意思是: 是否将计算得到的值直接覆盖之前的值 计算结果不会有影响。利用in-place计算可以节省内(显)存,同时还可以省去反复申请和释放内存的时间