cpu参数

如何从进程内部确定CPU和内存消耗?

泪湿孤枕 提交于 2020-01-09 11:35:19
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 我曾经负责从运行的应用程序内部确定以下性能参数的任务: 可用虚拟内存总量 当前使用的虚拟内存 我的进程当前使用的虚拟内存 总可用RAM 当前使用的RAM 我的进程当前使用的RAM 当前使用的CPU百分比 我的进程当前使用的CPU百分比 该代码必须在Windows和Linux上运行。 尽管这似乎是一项标准任务,但在手册(WIN32 API,GNU文档)以及Internet上找到必要的信息还是花了我几天的时间,因为关于该主题的信息太多,不完整/不正确/过时发现在那里。 为了使其他人免于遭受同样的麻烦,我认为将所有分散的信息以及通过反复试验发现的信息收集到一个地方是一个好主意。 #1楼 在Windows中,您可以通过以下代码获取cpu的使用情况: #include <windows.h> #include <stdio.h> //------------------------------------------------------------------------------------------------------------------ // Prototype(s)... //-------------------------------------------------------------

linux sar 命令详解

我只是一个虾纸丫 提交于 2020-01-09 10:22:38
sar(System Activity Reporter系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况、 系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等。本文主要以CentOS 6.3 x64系统为例,介绍sar命令。 sar命令常用格式 sar [options] [-A] [-o file] t [n] 其中: t为采样间隔,n为采样次数,默认值是1; -o file表示将命令结果以二进制格式存放在文件中,file 是文件名。 options 为命令行选项,sar命令常用选项如下: -A:所有报告的总和 -u:输出CPU使用情况的统计信息 -v:输出inode、文件和其他内核表的统计信息 -d:输出每一个块设备的活动信息 -r:输出内存和交换空间的统计信息 -b:显示I/O和传送速率的统计信息 -a:文件读写情况 -c:输出进程统计信息,每秒创建的进程数 -R:输出内存页面的统计信息 -y:终端设备活动情况 -w:输出系统交换活动信息 1. CPU资源监控 例如,每10秒采样一次,连续采样3次,观察CPU 的使用情况,并将采样结果以二进制形式存入当前目录下的文件test中,需键入如下命令: sar -u -o test 10 3 屏幕显示如下: 17:06

linux性能监控——CPU、Memory、IO、Network

。_饼干妹妹 提交于 2020-01-08 19:18:51
一、CPU 1、良好状态指标 CPU利用率:User Time <= 70%,System Time <= 35%,User Time + System Time <= 70%。 上下文切换:与CPU利用率相关联,如果CPU利用率状态良好,大量的上下文切换也是可以接受的。 可运行队列:每个处理器的可运行队列<=3个线程。 2、监控工具 vmstat $ vmstat 1 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 14 0 140 2904316 341912 3952308 0 0 0 460 1106 9593 36 64 1 0 0 17 0 140 2903492 341912 3951780 0 0 0 0 1037 9614 35 65 1 0 0 20 0 140 2902016 341912 3952000 0 0 0 0 1046 9739 35 64 1 0 0 17 0 140 2903904 341912 3951888 0 0 0 76 1044 9879 37 63 0 0 0 16 0 140 2904580

常见性能问题

心已入冬 提交于 2020-01-08 17:13:04
转自: https://www.cnblogs.com/jane4321/p/11012866.html 一、内存泄漏 1、堆内存溢出 现象:   (1)压测执行一段时间后,系统处理能力下降。这时用JConsole、JVisualVM等工具连上服务器查看GC情况,每次GC回收都不彻底并且可用堆内存越来越少。   (2)压测持续下去,最终在日志中有报错信息:java.lang.OutOfMemoryError.Java heap space。 排查手段:   (1)使用jmap -histo pid > test.txt命令将堆内存使用情况保存到test.txt文件中,打开文件查看排在前50的类中有没有熟悉的或者是公司标注的类名,如果有则高度怀疑内存泄漏是这个类导致的。   (2)如果没有,则使用命令:jmap -dump:live,format=b,file=test.dump pid生成test.dump文件,然后使用MAT进行分析。   (3)如果怀疑是内存泄漏,也可以使用JProfiler连上服务器在开始跑压测,运行一段时间后点击“Mark Current Values”,后续的运行就会显示增量,这时执行一下GC,观察哪个类没有彻底回收,基本就可以判断是这个类导致的内存泄漏。 解决方式:优化代码,对象使用完毕,需要置成null。 2、持久代溢出 现象:压测执行一段时间后

volatile底层原理

独自空忆成欢 提交于 2020-01-07 17:41:37
前言 我们知道volatile关键字的作用是保证变量在多线程之间的可见性,它是java.util.concurrent包的核心,没有volatile就没有这么多的并发类给我们使用。 本文详细解读一下volatile关键字如何保证变量在多线程之间的可见性,在此之前,有必要讲解一下CPU缓存的相关知识,掌握这部分知识一定会让我们更好地理解volatile的原理,从而更好、更正确地地使用volatile关键字。 CPU缓存 CPU缓存的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾 ,因为CPU运算速度要比内存读写速度快得多,举个例子: 一次主内存的访问通常在几十到几百个时钟周期 一次L1高速缓存的读写只需要1~2个时钟周期 一次L2高速缓存的读写也只需要数十个时钟周期 这种访问速度的显著差异,导致CPU可能会花费很长时间等待数据到来或把数据写入内存。 基于此,现在CPU大多数情况下读写都不会直接访问内存(CPU都没有连接到内存的管脚),取而代之的是CPU缓存,CPU缓存是位于CPU与内存之间的临时存储器,它的容量比内存小得多但是交换速度却比内存快得多。而缓存中的数据是内存中的一小部分数据,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可先从缓存中读取,从而加快读取速度。 按照读取顺序与CPU结合的紧密程度,CPU缓存可分为: 一级缓存:简称L1

进程/线程绑定到特定CPU核的linux实现(有代码有实例)

▼魔方 西西 提交于 2020-01-07 17:01:05
前言 现在计算机上的CPU大多都是多核的,有4核甚至是8核的。但是一个计算机启动之后其进程数是远远多于CPU核数的,因为操作系统会给自动调度这些进程在CPU核上轮流运行。但是对于应用程序或者进程,其性能要求较高时,可能有必要绑定该进程到指定的CPU核来运行,避免调度带来的额外开销。我自己也是因为最近的项目上有需要进程运行在指定的CPU核上的要求,所以了解了一下这项技术,并且将过程和总结记录于此。 CPU亲和性 在学习这项新技术之前,我们先来了解一下什么是CPU亲和性?所谓亲和性,就是把进程在指定的 CPU 上尽量长时间地运行而不被迁移到其他处理器,也称为CPU关联性;再简单的点的描述就将制定的进程或线程绑定到相应的cpu上;在多核运行的机器上,每个CPU本身自己会有缓存,缓存着进程使用的信息,而进程可能会被OS调度到其他CPU上,如此,CPU cache命中率就低了,当绑定CPU后,程序就会一直在指定的cpu跑,不会由操作系统调度到其他CPU上,性能有一定的提高。 预备知识 在编写测试程序之前,我们先来了解一下CPU相关的宏和函数。 1.首先要想使用CPU系列函数及相关的宏,需要声明下面的宏,以告诉编译器启用这些函数 # define _GNU_SOURCE 2.声明一个cpu_set_t,然后用 CPU_ZERO()宏来初始化数据: cpu_set_t mask ; CPU

JVM探秘:垃圾收集器

不想你离开。 提交于 2020-01-07 16:42:16
本系列笔记主要基于《深入理解Java虚拟机:JVM高级特性与最佳实践 第2版》,是这本书的读书笔记。 垃圾收集器 垃圾收集算法是是内存回收的方法论,垃圾收集器是内存回收的具体实现。不同的虚拟机会有不同的垃圾收集器的实现,我们主要讨论的是默认的HotSpot虚拟机,这个虚拟机包含的垃圾收集器如下图; 如上图所示,一共有7种垃圾收集器,如果两个垃圾收集器之间有双箭头连线,则两个垃圾收集器可搭配使用。上面是新生代的收集器,下面是老年代的收集器。每个垃圾收集器都有各自适合的使用场景。 Serial 收集器 Serial 是一个“单线程”的 新生代 收集器,使用 复制 算法,它只会使用一个CPU或者一条收集器线程去完成垃圾收集工作,并且它在垃圾收集时,必须 暂停所有其他的工作线程 ,直到它收集结束。“Stop The World”会在用户不可见的情况下,把用户的工作线程全部停掉,这往往是令人难以接受的。 下图是 Serial/Serial Old 收集器运行示意图: 上图中,新生代是 Serial 收集器采用 复制 算法,老年代是 Serial Old 收集器采用 标记-整理 算法。Serial虽然是一个缺点鲜明的收集器,但它依然是虚拟机在Client模式下的默认收集器,它也有优点,比如简单高效(与其他收集器单线程相比),对于单个CPU来说,Serial由于没有线程交互的开销,效率比较高

kvm虚拟化安装与部署(2)

旧巷老猫 提交于 2020-01-07 15:38:11
一、虚拟化VT开启确认   KVM 本身也有一些弱点,那就是相比裸金属虚拟化架构的 Xen 、 VMware ESX 和 HyperV , KVM 是运行在 Linux 内核之上的寄居式虚拟化架构,会消耗比较多的计算资源;不过针对这一点, Intel 、 AMD 已经在处理器设计上有专门的VT-x 和 AMD-V 扩展,这种特性在每次硬件更新的时候也会更新,往往每次更新后都对虚拟化性能和速度上有明显的提升,所以长远来看,也不是什么大问题。   KVM 的虚拟化需要硬件支持(需要处理器支持虚拟化:如 Intel 厂商的 Intel-VT ( vmx )技术&&AMD 厂商的 AMD-V ( svm )技术。是基于硬件的完全虚拟化。而 Xen 早期则是基于软件模拟的半虚拟化( Para-Virtualization ),新版本则是基于硬件支持的完全虚拟化。但 Xen 本身有自己的进程调度器,存储管理模块等,所以代码较为庞大。    你当前的 CPU 是否支持 VT 技术?当不确定你当前 CPU 是否支持 VT 技术时   1. 可以在 windows 下使用 cpu-z 软件来进行测试   2. 可以在 Linux 下查看 CPU 的相信信息来确定    CPU 虚拟化给我们带来了哪些好处?   CPU 的虚拟化技术可以将单 CPU 模拟多 CPU 并行

Java 多线程基础

ⅰ亾dé卋堺 提交于 2020-01-07 13:18:39
Java 多线程基础 Java使用多线程进行并发编程。 一、进程、线程、协程、守护线程 进程 : 是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程;进程也是程序的一次执行过程,是系统运行程序的基本单位;系统运行一个程序即是一个进程从创建、运行到消亡的过程。 线程 : 线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。 协程: 协同线程,某个线程为主线程,其他线程辅助它。主线程结束,辅助线程直接结束。主线程存活,其他线程才可以执行任务,类似于java中的守护线程。 守护线程: Java使用多线程并发,也有守护线程的辅助。 状态: 线程和进程一样分为五个阶段:创建、就绪、运行、阻塞、终止。 优先级: 线程之间也有优先级,优先级高的先执行(并非绝对)。 线程竞争资源,执行结果不确定,优先级也不一定靠谱,每次执行由cpu调度资源。 可以通过加锁进行人为控制。 二、Java创建线程 Java创建线程的方法有三种,一种是继承Thread类,另外一种是实现Runable接口,最后一种不谈。 1、继承Thread类创建线程 重写run()方法、使用start()方法开启线程。 //继承Thread类实现多线程 public class ThreadDemo

VMware与Centos系统安装之重置root密码

那年仲夏 提交于 2020-01-07 03:49:50
VMware与Centos系统安装之重置root密码 今日任务 1.Linux发行版的选择 2.vmware创建一个虚拟机(centos) 3.安装配置centos7 4.xshell配置连接虚拟机(centos) 选择性 pc可以选择 -纯系统 Linux/windows -双系统 Windows+Linux -虚拟化技术 Windows+vmware workstation 服务器 -物理机纯系统 -物理机+vmware(vmware esxi) -物理机+docker 安装 -简易安装 -自定义安装 -快照 下载centos系统ISO镜像 要安装centos系统,就必须得有centos系统软件安装程序,可以通过浏览器访问centos官网http://www.centos.org,然后找到Downloads - > mirrors链接,点击后进入下载,但是由于这是国外的网址,下载速度肯定受限。 因此可以使用国内的镜像源 https://opsx.alibaba.com/mirror # 阿里云官方镜像站 iso下载地址(此DVD映像包含可以使用该软件安装的所有软件包安装程序。这是大多数用户的推荐图像。):https://mirrors.aliyun.com/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1810.iso