cpu参数

多线程基础知识

亡梦爱人 提交于 2019-12-16 22:07:40
线程与进程的区别   1. 进程是资源分配的最小单元,线程是CPU调度的最小单元。所有与进程相关的资源,均被记录再PCB中。   2. 线程隶属于某一个进程,共享所有进程的资源。线程只由堆栈寄存器、程序计数器和TCB构成。   3. 进程可以看作独立的应用,线程不能看作独立的应用。   4. 进程有独立的地址空间,相互不影响,而线程只是进程的不同执行路径,如果线程挂了,进程也就挂了。所以多进程的程序比多线程程序健壮,但是切换消耗资源多。    Java中进程与线程的关系   1. 运行一个程序会产生一个进程,进程至少包含一个线程。   2. 每个进程对应一个JVM实例,多线线程共享JVM中的堆。   3. Java采用单线程编程模型,程序会自动创建主线程。   4. 主线程可以创建子线程,原则上要后于子线程完成执行。 线程中start方法和run方法的区别   Java中创建线程的方式有两种,不管使用继承Thread的方法是hiRunnable接口的方法,都需要重写run方法。调用start方法会创建一个新的线程并启动,run方法只是启动线程后的回调函数,如果调用run方法,那么执行run方法的线程不会是新创建的线程,而如果使用start方法,那么执行run方法的线程就是我们刚刚启动的那个线程。 public class Main { public static void main

详解服务器性能测试的全生命周期?——从测试、结果分析到优化策略(转载)

喜夏-厌秋 提交于 2019-12-16 10:02:51
服务器性能测试是一项非常重要而且必要的工作,本文是作者Micheal在对服务器进行性能测试的过程中不断摸索出来的一些实用策略,通过定位问题,分析原因以及解决问题,实现对服务器进行更有针对性的优化,提升服务器的性能。 1. 服务器性能测试小结 讲到服务器性能大部分人会想到这个服务器的架构是什么样子的,用的什么epoll,select,spring,tornado之类的。其实从本质上来看的话目前大部分的服务器主要包括逻辑层以及DB层,我们采用的各种框架组件处于逻辑服务器中,如下图所示。 服务器性能测试是一项比较繁琐的事情,作为没有做过性能测试的同学可能需要理清楚以下几个事情。 1.1. 协议分析 首先是协议分析,性能测试本质上是我们用代码来模拟真实的用户请求,所以我们必须要知道发送出去的请求内容才能模拟。在典型的CS服务器中很多使用了protobuf,thrift,tdr(腾讯自研)来序列化以及反序列号请求内容。 序列化之后一方面可以对数据进行压缩处理,另一方面也避免请求内容明文传输造成被抓包·泄漏数据的危险。之前有过服务器传输数据的时候使用的是明文直接发送,而且这个数据是一些敏感的sql语句,这样首先暴露了数据库的表结构,同时不法分子可以通过模拟发包造成“脱裤”甚至是数据被清空。 1.1.1. Protobuf 谷歌出品,必属精品。Protobuf使用起来很方便,学习成本非常低

[转帖]pidstat 命令详解

流过昼夜 提交于 2019-12-15 09:08:03
pidstat 命令详解 https://www.jianshu.com/p/3991c0dba094 pidstat -r -u -d -p 各种参数非常好用. pidstat 概述 pidstat是sysstat工具的一个命令,用于监控全部或指定进程的cpu、内存、线程、设备IO等系统资源的占用情况。pidstat首次运行时显示自系统启动开始的各项统计信息,之后运行pidstat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。 pidstat 安装 pidstat 是sysstat软件套件的一部分,sysstat包含很多监控linux系统状态的工具,它能够从大多数linux发行版的软件源中获得。 在Debian/Ubuntu系统中可以使用下面的命令来安装: apt-get install sysstat CentOS/Fedora/RHEL版本的linux中则使用下面的命令: yum install sysstat pidstat 示例 pidstat 的用法: pidstat [ 选项 ] [ <时间间隔> ] [ <次数> ] 如下图: 常用的参数: -u:默认的参数,显示各个进程的cpu使用统计 -r:显示各个进程的内存使用统计 -d:显示各个进程的IO使用情况 -p:指定进程号 -w:显示每个进程的上下文切换情况 -t

关于 Python_你一定没读过的8个技巧

泪湿孤枕 提交于 2019-12-14 17:17:53
介绍 Python 功能和小技巧的文章网上有无数篇,比如变量解压缩,partial 偏函数,枚举可迭代对象... 但关于 Python 我们能说的还有很多。所以今天我将向大家展示一些我知道和有使用过的特性,这些特性在其它文章或博客中很少被提及: 消毒字符串输入 对用户输入内容进行消毒几乎适用于你写的每一个程序。通常来说转换字符大小写的操作就足够了,有时候用 Regex 正则表达式就能完成,但对于比较复杂的情况,我们有更好的办法: user_input = "This\nstring has\tsome whitespaces...\r\n" character_map = { ord('\n') : ' ', ord('\t') : ' ', ord('\r') : None } user_input.translate(character_map) # This string has some whitespaces... " 在这个例子中我们可以看到空格子字符"\n"和"\t"已被单个空格代替,而"\r"已经被删除。这是一个很简单的示例,但我们可以更进一步,并使用unicodedata包和它的 combining() 函数来重新生成映射。 迭代器切片 如果尝试对 Iterator 进行切片,则会出现 TypeError和"generator object is not

关于 Python_你一定没读过的8个技巧

吃可爱长大的小学妹 提交于 2019-12-14 15:55:23
介绍 Python 功能和小技巧的文章网上有无数篇,比如变量解压缩,partial 偏函数,枚举可迭代对象... 但关于 Python 我们能说的还有很多。所以今天我将向大家展示一些我知道和有使用过的特性,这些特性在其它文章或博客中很少被提及: 消毒字符串输入 对用户输入内容进行消毒几乎适用于你写的每一个程序。通常来说转换字符大小写的操作就足够了,有时候用 Regex 正则表达式就能完成,但对于比较复杂的情况,我们有更好的办法: user_input = "This\nstring has\tsome whitespaces...\r\n" character_map = { ord('\n') : ' ', ord('\t') : ' ', ord('\r') : None } user_input.translate(character_map) # This string has some whitespaces... " 在这个例子中我们可以看到空格子字符"\n"和"\t"已被单个空格代替,而"\r"已经被删除。这是一个很简单的示例,但我们可以更进一步,并使用unicodedata包和它的 combining() 函数来重新生成映射。 迭代器切片 如果尝试对 Iterator 进行切片,则会出现 TypeError和"generator object is not

java 性能问题排查与性能优化

帅比萌擦擦* 提交于 2019-12-14 13:39:56
1. 代码相关 遇到性能问题,首先应该做的是检查否与业务代码相关——不是通过阅读代码解决问题,而是通过日志或代码,排除掉一些与业务代码相关的低级错误。 性能优化的最佳位置,是应用内部。 譬如,查看业务日志,检查日志内容里是否有大量的报错产生,应用层、框架层的一些性能问题,大多数都能从日志里找到端倪(日志级别设置不合理,导致线上疯狂打日志);再者,检查代码的主要逻辑,如 for 循环的不合理使用、NPE、正则表达式、数学计算等常见的一些问题,都可以通过简单地修改代码修复问题。 **别动辄就把性能优化和缓存、异步化、JVM 调优等名词挂钩,复杂问题可能会有简单解,「二八原则」在性能优化的领域里里依然有效。**当然了,了解一些基本的「代码常用踩坑点」,可以加速我们问题分析思路的过程,从 CPU、内存、JVM 等分析到的一些瓶颈点优化思路,也有可能在代码这里体现出来。 下面是一些高频的,容易造成性能问题的编码要点。 1)正则表达式非常消耗 CPU(如贪婪模式可能会引起回溯),慎用字符串的 split()、replaceAll() 等方法;正则表达式表达式一定预编译。 2)String.intern() 在低版本(Java 1.6 以及之前)的 JDK 上使用,可能会造成方法区(永久代)内存溢出。在高版本 JDK 中,如果 string pool 设置太小而缓存的字符串过多

spark调优(二):资源调优

穿精又带淫゛_ 提交于 2019-12-14 00:47:27
转发学习自美团技术团队: https://tech.meituan.com 建议继续阅读之前先对这篇文章的内容有一定了解: Apache Spark 内存管理详解 推荐阅读: spark调优(一):开发调优 资源调优概述 在开发完Spark作业之后,就该为作业配置合适的资源了。Spark的资源参数,基本都可以在spark-submit命令中作为参数设置。很多Spark初学者,通常不知道该设置哪些必要的参数,以及如何设置这些参数,最后就只能胡乱设置,甚至压根儿不设置。资源参数设置的不合理,可能会导致没有充分利用集群资源,作业运行会极其缓慢;或者设置的资源过大,队列没有足够的资源来提供,进而导致各种异常。总之,无论是哪种情况,都会导致Spark作业的运行效率低下,甚至根本无法运行。因此我们必须对Spark作业的资源使用原理有一个清晰的认识,并知道在Spark作业运行过程中,有哪些资源参数是可以设置的,以及如何设置合适的参数值。 1、Spark作业基本运行原理 详细原理见上图。我们使用spark-submit提交一个Spark作业之后,这个作业就会启动一个对应的Driver进程。根据你使用的部署模式(deploy-mode)不同,Driver进程可能在本地启动,也可能在集群中某个工作节点上启动。Driver进程本身会根据我们设置的参数,占有一定数量的内存和CPU core

高性能编程论述

元气小坏坏 提交于 2019-12-13 19:48:04
高性能编程 前言 首先说一下我为什么要写这篇博客。因为 面试 有提到这个,我当时直接说不懂(一方面当时心态很差,另一方面面试官的询问方式令我很反感。所以直接refuse了。小伙伴们千万别学我)。 所以,打算谈一谈我对Java高性能编程方面的认识与总结。 首先,高性能编程不涉及架构层次。所以打算通过这篇文章,来了解架构提升系统性能的小伙伴要失望了。我将Java高性能编程主要分为编码与网络两个部分(说白了,只关注编码,不提其它)。 其次,我们需要了解何为高性能。性能往往与系统的吞吐量,响应时间,并发量等息息相关。只有了解到这点,我们才可以对症下药。 网络部分:BIO,NIO,Netty等,这部分在之前的《 从BIO到Netty的演变 》有所提及,这里不再赘述。 而编码部分,也是最多人关注的部分。我将它按层次分为: 数据结构(如String,StringBuffer,StringBuilder) 语言特性(如for循环的JIT优化,并行流等) 算法(如分治算法,贪心算法等) 设计模式(如原型模式) 多线程(包括线程池,锁等) 扩展-特定机制(其实就是一些成熟的方案) 并发容器被归类到多线程中,而Fork/Join框架被归类到特定机制(当然,也可以归类到算法,多线程等。取决于看待它的角度)。 由于这其中每个分支,拆分出来都是很大的一块内容。所以这篇文章的目标只是给个方向而已

linux中Workqueue机制的分析—— create_workqueue和create_singlethread_workqueue 的使用和区别

南楼画角 提交于 2019-12-13 15:50:38
软硬件协同设计是未来发展的主流,软硬件的界限越来越模糊,软硬件的设计思想是相通的,实现方法是各异的,实现的结果上当然也存在较大差别,因此,很有必要做好软硬件的协同设计。 什么是workqueue?Linux中的Workqueue机制就是为了简化内核线程的创建。通过调用workqueue的接口就能创建内核线程。并且可以根据当前系统CPU的个数创建线程的数量,使得线程处理的事务能够并行化。workqueue是内核中实现简单而有效的机制,他显然简化了内核daemon的创建,方便了用户的编程, Workqueue机制的实现Workqueue机制中定义了两个重要的数据结构,分析如下: 1、cpu_workqueue_struct结构。 该结构将CPU和内核线程进行了绑定。在创建workqueue的过程中,Linux根据当前系统CPU的个数创建cpu_workqueue_struct。在该结构主要维护了一个任务队列,以及内核线程需要睡眠的等待队列,另外还维护了一个任务上下文,即task_struct 2、work_struct结构是对任务的抽象。 在该结构中需要维护具体的任务方法,需要处理的数据,以及任务处理的时间。该结构定义如下: struct work_struct { unsigned long pending; struct list_head entry; void (*func)

my.ini的配置参数详解,以及binlog的三种模式

一曲冷凌霜 提交于 2019-12-13 15:48:35
先点赞,后观看,伸手才有好习惯 my.ini配置详解 【转载】 #*** client options 相关选项 ***# #以下选项会被MySQL客户端应用读取。注意只有MySQL附带的客户端应用程序保证可以读取这段内容。如果你想你自己的MySQL应用程序获取这些值。需要在MySQL客户端库初始化的时候指定这些选项。 [client] port = 3309 socket = /usr/local/mysql/tmp/mysql.sock [mysqld] !include /usr/local/mysql/etc/mysqld.cnf #包含的配置文件 ,把用户名,密码文件单独存放 port = 3309 bind-address = 0.0.0.0 server-id = 1 #表示是本机的序号为1,唯一 socket = /usr/local/mysql/tmp/mysql.sock pid-file = /usr/local/mysql/var/mysql.pid basedir = /usr/local/mysql/ datadir = /usr/local/mysql/var/ tmpdir = /usr/local/mysql/tmp/ #此目录被 MySQL用来保存临时文件.例如,它被用来处理基于磁盘的大型排序,和内部排序一样,以及简单的临时表