cpu时间

Go pprof性能调优

一个人想着一个人 提交于 2020-02-08 23:38:36
在计算机性能调试领域里,profiling 是指对应用程序的画像,画像就是应用程序使用 CPU 和内存的情况。 Go语言是一个对性能特别看重的语言,因此语言中自带了 profiling 的库,这篇文章就要讲解怎么在 golang 中做 profiling。 Go性能优化 Go语言项目中的性能优化主要有以下几个方面: CPU profile:报告程序的 CPU 使用情况,按照一定频率去采集应用程序在 CPU 和寄存器上面的数据 Memory Profile(Heap Profile):报告程序的内存使用情况 Block Profiling:报告 goroutines 不在运行状态的情况,可以用来分析和查找死锁等性能瓶颈 Goroutine Profiling:报告 goroutines 的使用情况,有哪些 goroutine,它们的调用关系是怎样的 采集性能数据 Go语言内置了获取程序的运行数据的工具,包括以下两个标准库: runtime/pprof :采集工具型应用运行数据进行分析 net/http/pprof :采集服务型应用运行时数据进行分析 pprof开启后,每隔一段时间(10ms)就会收集下当前的堆栈信息,获取格格函数占用的CPU以及内存资源;最后通过对这些采样数据进行分析,形成一个性能分析报告。 注意,我们只应该在性能测试的时候才在代码中引入pprof。 工具型应用

40个Java多线程问题总结

▼魔方 西西 提交于 2020-02-08 22:14:31
前言 这些多线程的问题,有些来源于各大网站、有些来源于自己的思考。可能有些问题网上有、可能有些问题对应的答案也有、也可能有些各位网友也都看过,但是本文写作的重心就是所有的问题都会按照自己的理解回答一遍,不会去看网上的答案,因此可能有些问题讲的不对,能指正的希望大家不吝指教。 1、多线程有什么用? (1)发挥多核CPU的优势 随着工业的进步,现在的笔记本、台式机乃至商用的应用服务器至少也都是双核的,4核、8核甚至16核的也都不少见,如果是单线程的程序,那么在双核CPU上就浪费了50%,在4核CPU上就浪费了75%。单核CPU上所谓的"多线程"那是假的多线程,同一时间处理器只会处理一段逻辑,只不过线程之间切换得比较快,看着像多个线程"同时"运行罢了。多核CPU上的多线程才是真正的多线程,它能让你的多段逻辑同时工作,多线程,可以真正发挥出多核CPU的优势来,达到充分利用CPU的目的。 (2)防止阻塞 从程序运行效率的角度来看,单核CPU不但不会发挥出多线程的优势,反而会因为在单核CPU上运行多线程导致线程上下文的切换,而降低程序整体的效率。但是单核CPU我们还是要应用多线程,就是为了防止阻塞。试想,如果单核CPU使用单线程,那么只要这个线程阻塞了,比方说远程读取某个数据吧,对端迟迟未返回又没有设置超时时间,那么你的整个程序在数据返回回来之前就停止运行了。多线程可以防止这个问题

Docker安全

允我心安 提交于 2020-02-08 17:18:58
Docker的安全性 Docker的安全性主要体现在如下几个方面: Docker容器的安全性这是指容器是否会危害到宿主机或其他容器; 镜像的安全性用户如何确保下载下来的镜像是可信的、未被篡改过的; Docker daemon的安全性如何确保发送给daemon的命令是由可信用户发起的。用户通过CLI或者REST API向daemon发送命令已完成对容器的各种操作,例如通过docker exec命令删除容器里的数据,因此需要保证client与daemon的连接时可信的。 Docker容器的安全性 容器的安全性问题的根源在于容器和宿主机共用内核,因此受攻击的面特别大,另外,如果容器里的应用导致Linux内核崩溃,那么毫无疑问,整个系统哥都会崩溃。这一点与虚拟机是不同的,虚拟机与宿主机的接口非常有限,而且虚拟机崩溃一般不会导致宿主机崩溃。 在共用内核的前提下,容器主要通过内核的Cgroup和Namespace这两大特性来达到容器隔离和资源限制的目的。目前Cgroup对系统资源的限制已经比较完善了,但Namespace的隔离还是不够完善,只有PID、mount、network、UTS、IPC和user这几种。而对于未隔离的内核资源,容器访问时也就会存在影响到宿主机及其他容器的风险。 比如,procfs里的很多接口都没有被隔离,因此通过procfs可以查询到整个系统的信息,例如系统的CPU

Docker的安全性

徘徊边缘 提交于 2020-02-08 17:16:37
Docker的安全性 Docker的安全性主要体现在如下几个方面: Docker容器的安全性这是指容器是否会危害到宿主机或其他容器; 镜像的安全性用户如何确保下载下来的镜像是可信的、未被篡改过的; Docker daemon的安全性如何确保发送给daemon的命令是由可信用户发起的。用户通过CLI或者REST API向daemon发送命令已完成对容器的各种操作,例如通过docker exec命令删除容器里的数据,因此需要保证client与daemon的连接时可信的。 Docker容器的安全性 容器的安全性问题的根源在于容器和宿主机共用内核,因此受攻击的面特别大,另外,如果容器里的应用导致Linux内核崩溃,那么毫无疑问,整个系统哥都会崩溃。这一点与虚拟机是不同的,虚拟机与宿主机的接口非常有限,而且虚拟机崩溃一般不会导致宿主机崩溃。 在共用内核的前提下,容器主要通过内核的Cgroup和Namespace这两大特性来达到容器隔离和资源限制的目的。目前Cgroup对系统资源的限制已经比较完善了,但Namespace的隔离还是不够完善,只有PID、mount、network、UTS、IPC和user这几种。而对于未隔离的内核资源,容器访问时也就会存在影响到宿主机及其他容器的风险。 比如,procfs里的很多接口都没有被隔离,因此通过procfs可以查询到整个系统的信息,例如系统的CPU

Linux 命令——vmstat

旧城冷巷雨未停 提交于 2020-02-08 16:21:47
vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监控。 语法 vmstat [ -a ] [ -f ] [ -s ] [ -p ] [ -d ] [ PhysicalVolume … ] [ Interval [ Count ] ] -a: 显示活跃和非活跃内存,所显示的内容除增加inact和active -f: 显示显示从系统启动至今的fork数量,Linux 新建进程用fork -s: 查看内存使用的详细信息 -d: 查看磁盘的读/写 -p: 显示指定磁盘分区统计信息 PhysicalVolume 参数指定物理卷的名称。 vmstat [root@iZwz9hmb50uzud432t180uZ ~]# vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 3 0 0 148624 0 191716 0 0 2 4 19 4 1 2 97 0 0 procs 代表进程 r: 运行队列中进程数量 b: 等待IO的进程数量 memory 代表内存 swpd:

Docker Cgroup 容器资源限制

ε祈祈猫儿з 提交于 2020-02-08 13:42:09
docker通过cgroup来控制容器使用的资源配额,包括CPU、内存、磁盘三大方面。 1.限制内存 查询系统中已经mount的cgroup的文件系统,这里的t表示type [root@server1 ~]# mount -t cgroup 搜索cgroup软件包 [root@server1 ~]# yum search cgroup 安装libcgroup [root@server1 ~]# yum install -y libcgroup-tools.x86_64 [root@sever1 ~]# cd /sys/fs/cgroup/memory/ [root@sever1 memory]# ls 创建目录 [root@sever1 memory]# mkdir x1 [root@sever1 memory]# cd x1 [root@sever1 x1]# ls [root@sever1 x1]# cat memory.limit_in_bytes 9223372036854771712 [root@sever1 x1]# cat memory.memsw.limit_in_bytes 9223372036854771712 限制内存;200M = 1024 * 200 = 209715200 [root@sever1 x1]# echo 209715200 > memory

锁(Lock)、内存屏障(Memory barrier)与 缓存一致性( Cache coherence)

假如想象 提交于 2020-02-08 05:08:53
在应用层,关于锁的使用大家应该都很熟悉了,作用就是为了保护共享变量不被同时操作而导致无法预测的情况。然而深入到具体实现,锁仅仅只是锁定临界区吗? 锁的实现其实还必须实现一个语义,也就是内存屏障。内存屏障主要用于防止指令重排而导致的无法预测的情况。代码经过编译器生成的指令并不一定都是按着我们原先的想法来生成的,可能经过优化等情况进行了指令的重排,然而这些重排在执行后的结果应当是一致的。其实及时编译器不重排指令,在现代的cpu中,也常常会将指令乱序执行,所以内存屏障可以保证屏障指令前后的指令顺序。 Memory barrier Memory barrier 也称为 membar,存储器围栏或栅栏指令,是一种类型的屏障指令,其使得一个中央处理单元(CPU)或 编译器执行的排序上约束存储器之前和屏障指令后发出的操作。 这通常意味着可以保证在屏障之前发布的操作可以在屏障之后发布的操作之前执行 。 内存屏障是必需的,因为大多数现代CPU都采用了性能优化,这些性能优化可能导致乱序执行。通常在单个执行线程中不会注意到这种内存操作(装入和存储)的重新排序,但是除非仔细控制,否则可能在并发程序和设备驱动程序中导致不可预测的行为。排序约束的确切性质取决于硬件,并由体系结构的内存排序模型定义。一些体系结构为实施不同的排序约束提供了多个障碍。 当实现在多个设备共享的内存上运行的低级机器代码时

多进程《一》进程理论

[亡魂溺海] 提交于 2020-02-08 05:06:50
一 什么是进程 进程:正在进行的一个过程或者说一个任务。而负责执行任务则是cpu。 二 进程与程序的区别 程序仅仅只是一堆代码而已,而进程指的是程序的运行过程。 举例: 想象一位有一手好厨艺的计算机科学家egon正在为他的女儿元昊烘制生日蛋糕。 他有做生日蛋糕的食谱, 厨房里有所需的原料:面粉、鸡蛋、韭菜,蒜泥等。 在这个比喻中: 做蛋糕的食谱就是程序(即用适当形式描述的算法) 计算机科学家就是处理器(cpu) 而做蛋糕的各种原料就是输入数据。 进程就是厨师阅读食谱、取来各种原料以及烘制蛋糕等一系列动作的总和。 现在假设计算机科学家egon的儿子alex哭着跑了进来,说:Hey, Dad, my head got stung by a bee. 科学家egon想了想,处理儿子alex蛰伤的任务比给女儿元昊做蛋糕的任务更重要,于是 计算机科学家就记录下他照着食谱做到哪儿了(保存进程的当前状态),然后拿出一本急救手册,按照其中的指示处理蛰伤。这里,我们看到处理机从一个进程(做蛋糕)切换到另一个高优先级的进程(实施医疗救治),每个进程拥有各自的程序(食谱和急救手册)。当蜜蜂蛰伤处理完之后,这位计算机科学家又回来做蛋糕,从他 离开时的那一步继续做下去。 需要强调的是:同一个程序执行两次,那也是两个进程,比如打开暴风影音,虽然都是同一个软件,但是一个可以播放苍井空,一个可以播放饭岛爱。 三

CPU100%问题快速定位思路

强颜欢笑 提交于 2020-02-08 04:39:46
一、CPU 100%问题定位 1、功能问题,通过日志,单步调试相对比较好定位。 2、性能问题,例如线上服务器CPU100%,如何找到相关服务,如何定位问题代码,更考验技术人的功底。 二、故障演练题目 某服务器上部署了若干tomcat实例,即若干垂直切分的Java站点服务,以及若干Java微服务,运维突然收到CPU异常告警。 问:如何定位是哪个服务进程导致CPU过载? 哪个线程导致CPU过载? 哪段代码导致CPU过载? 第一步 最消耗CPU的进程 工具 : top或者 htop(高级) 方法:top -c 显示进程运行详细列表 键入 P (大写P),按照cpu进行排序 如上图,最耗CPU的进程PID为1865 步骤二:找到最耗CPU的线程 工具:top 方法: top -Hp 1865 ,显示一个进程的线程运行信息列表 键入P (大写p),线程按照CPU使用率排序 如上图,进程1865内,最耗CPU的线程PID为2747 步骤三:将线程PID转化为16进制 工具:printf 方法:printf “%x\n” 2747 图示: 如上图,2747对应的16进制是abbn,当然,这一步可以用计算器。 注意:之所以要转化为16进制,是因为堆栈里,线程id是用16进制表示的。 步骤四:查看堆栈,找到线程在干嘛 工具:pstack/jstack/grep 方法:jstack 10765 |

性能调优概述,这是一篇最通俗易懂性能调优的总结!

拈花ヽ惹草 提交于 2020-02-07 21:51:44
1. 作者概述 2. 什么是性能调优?(what) 3. 为什么需要性能调优?(why) 4. 什么时候需要性能调优?(when) 5. 什么地方需要性能调优?(where) 6. 什么人来进行性能调优?(who) 7. 怎么样进行性能调优?(How) 8. 总结 硬件配置:CUP Xeon E5620 x 2 8核心, 内存 16G , 硬盘 RAID 10,操作系统: CentOS 6.4 x86_64(64位)。 概述 在这篇博文中,我不想用一些抽象的概念去说性能调优的问题,只想用最通俗的语言尽量来准确的表达我的想法。 由于本人小平有限,有什么不对或者不清楚的地方欢迎大家交流指正。为了更能通俗易懂的理解我们即将要的性能调优的话题,我在这里简单的和大家说一下我写这篇文章的写作方法 5w+1h方法。 注,5w+1h就是对所做工作进行科学的分析,对某一工作在调查研究的基础上: · 就其工作内容(What) · 责任者(Who) · 工作岗位(Where) · 工作时间(When · 怎样操作(How · 以及为何这样做(Why) 即”5W”、”1H”进行书面描述,并按此描述进行操作,达到完成职务任务的目标。(来源“百度百科”) 哈哈听过马哥课程的一定不陌生! 二、什么是性能调优?(what) 在说什么是性能调优之前我们先来说一下,计算机的体系结构。 如上图,简单来说包括三块:硬件