线程数

Tomcat 的连接数与线程池

∥☆過路亽.° 提交于 2019-11-30 05:43:52
前言 在使用tomcat时,经常会遇到连接数、线程数之类的配置问题,要真正理解这些概念,必须先了解Tomcat的连接器(Connector)。 在前面的文章 详解Tomcat配置文件server.xml 中写到过:Connector的主要功能,是接收连接请求,创建Request和Response对象用于和请求端交换数据;然后分配线程让Engine(也就是Servlet容器)来处理这个请求,并把产生的Request和Response对象传给Engine。当Engine处理完请求后,也会通过Connector将响应返回给客户端。 可以说,Servlet容器处理请求,是需要Connector进行调度和控制的,Connector是Tomcat处理请求的主干,因此Connector的配置和使用对Tomcat的性能有着重要的影响。这篇文章将从Connector入手,讨论一些与Connector有关的重要问题,包括NIO/BIO模式、线程池、连接数等。 根据协议的不同,Connector可以分为HTTP Connector、AJP Connector等,本文只讨论HTTP Connector。 一、Nio、Bio、APR 1、Connector的protocol Connector在处理HTTP请求时,会使用不同的protocol。不同的Tomcat版本支持的protocol不同

BlockingQueue接口和线程池

核能气质少年 提交于 2019-11-30 02:59:30
BlockingQueue接口和线程池 BlockingQueue接口 它有四套api,add/remove操作失败会直接抛出异常,offer/poll操作失败会返回特殊值,还可以加时间,过了时间返回失败,put/take操作失败会阻塞。 ArrayBlockingQueue:是数组实现的,必须构造时传入大小,传入后不可改变。 DelayQueue:实现Delay接口,与排序有关,它是一个可以实现排序的队列,内部就是堆 LinkedBlockingQueue:可以指定大小也可以不指定,内部实现是链表 PriorityBlockingQueue:是有优先级的队列,允许插入元素为null,所有其中对象必须实现Comparable接口。 SynchronousQueue:内部仅容纳一个元素,当一个线程放入元素后就会被阻塞,直到这个元素被消费,又称为同步队列 线程池ThreadPoolExecutor ThreadPoolExecutor的7个构造参数: 核心线程数量:如果运行线程数少于这个值直接创建新线程,即使线程池中线程是空闲的 最大线程数:当大于核心线程少于最大线程时,只有当阻塞队列满了才会创建新线程,当核心线程数和最大线程数相同的时候,线程池大小是固定的,新任务提交会把它放在阻塞队列中等待。 阻塞队列:有三种模式,第一就是使用SynchronousQueue

Jmeter -- 入门,基础操作

删除回忆录丶 提交于 2019-11-30 02:51:20
1. 添加线程组 设置线程组参数: a)线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数。 b)Ramp-Up Period(in seconds)准备时长:设置的虚拟用户数需要多长时间全部启动。如果线程数为10,准备时长为2,那么需要2秒钟启动10个线程,也就是每秒钟启动5个线程。 c)循环次数:每个线程发送请求的次数。如果线程数为10,循环次数为100,那么每个线程发送100次请求。总请求数为10*100=1000 。如果勾选了“永远”,那么所有线程会一直发送请求,一到选择停止运行脚本。 2. 添加请求 3. 添加监听器(查看结果树、聚合报告等) 来源: https://www.cnblogs.com/xiaochongc/p/11548357.html

前端性能优化

邮差的信 提交于 2019-11-30 00:09:00
转自: http://blog.itpub.net/69917606/viewspace-2643472/ 浏览器访问优化 减少 HTTP 请求 - HTTP 请求需要建立通信链路,进行数据传输,开销高昂,所以减少 HTTP 请求数可以有效提高访问性能。减少 HTTP 的主要手段是合并 Css、JavaScript、图片。 使用浏览器缓存 - 因为静态资源文件更新频率低,可以缓存浏览器中以提高性能。设置 HTTP 头中的 Cache-Control 和 Expires 属性,可以设定浏览器缓存。 启用压缩 - 在服务器端压缩静态资源文件,在浏览器端解压缩,可以有效减少传输的数据量。由于文本文件压缩率可达 80% 以上,所以可以对静态资源,如 Html、Css、JavaScrip 进行压缩。 CSS 放在页面最上面,JavaScript 放在页面最下面 - 浏览器会在下载完全部的 Css 后才对整个页面进行渲染,所以最好的做法是将 Css 放在页面最上面,让浏览器尽快下载 Css;JavaScript 则相反,浏览器加载 JavaScript 后立即执行,可能会阻塞整个页面,造成页面显示缓慢,因此 JavaScript 最好放在页面最下面。 减少 Cookie 传输 - Cookie 包含在 HTTP 每次的请求和响应中,太大的 Cookie 会严重影响数据传输。 2.2. CDN

线程池

ぃ、小莉子 提交于 2019-11-29 22:27:47
第一.线程的含义 在 Java 中,如果每个请求到达就创建一个新线程,创建和销毁线程花费的时间和消耗的系统资源都相当大,甚至可能要比在处理实际的用户请求的时间和资源要多的多。 如果在一个 Jvm 里创建太多的线程,可能会使系统由于过度消耗内存或“切换过度”而导致系统资源不足为了解决这个问题,就有了线程池的概念, 线程池的核心逻辑是提前创建好若干个线程放在一个容器中。如果有任务需要处理,则将任务直接分配给线程池中的线程来执行就行,任务处理完以后这个线程不会被销毁, 而是等待后续分配任务。同时通过线程池来重复管理线程还可以避免创建大量线程增加开销。 第二.线程池的优势 1. 降低创建线程和销毁线程的性能开销 2. 提高响应速度,当有新任务需要执行是不需要等待线程创建就可以立马执行 3. 合理的设置线程池大小可以避免因为线程数超过硬件资源瓶颈带来的问题 第三.线程池的API 只需要直接使用Executors 的工厂方法,就可以使用线程池: newFixedThreadPool: 返回一个固定数量的线程池,线程数量不变,当有一个任务的提交时,若线程池 空闲,则立即执行,若没有,则会被暂缓在一个任务队列中,等待有空闲的线程去执行。 public class ExecutorsTest implements Runnable{ public static void main(String[]

Linux上安装elasticsearch

允我心安 提交于 2019-11-29 21:30:38
1、ES(elasticsearch)简介   ES是一个分布式使用RestFul风格的数据搜索引擎,并且ES是构建在Lucene框架之上,也就是说ES也是基于Lucene进行开发的搜索引擎框架。   ES三大核心:     Index       相当于关系型数据库中的库     Type       相当于关系型数据库中的表     Document       相当于关系型数据库中的表数据 2、ES的配置   ES是apache公司的,所以必须要配置jdk。   ES不要用最新版,因为ES的最新版必须要求jdk在11版本以上,但是目前市面上所有的公司全部都在jdk8或者以下。 2.1.配置jdk 2.2.从官网中下载ES 2.3.解压es的压缩包   tar -zxvf es.... 2.4.增大linux上部署软件的内存和硬盘   (以下的配置一定要使用root用户,否则没有权限或者配置不生效)   vi /etc/security/limits.conf   配置了某个用户/某些用户对软件的内存和硬盘使用权限 * soft nproc 655350 * soft nofile 655350 * hard nproc 655350 * hard nofile 655350 3.5.最大线程数 (ES一般情况是以集群启动,所以目前的用户无法满足ES所要创建的线程

Java多线程(十三):线程池

巧了我就是萌 提交于 2019-11-29 20:04:52
线程池类结构 1.Executor是顶级接口,有一个execute方法。 2.ExecutorService接口提供了管理线程的方法。 3.AbstractExecutorService管理普通线程,SchedulerExecutorService管理定时任务。 简单的示例 public class MyThread46 { public static void main(String[] args) { long startTime = System.currentTimeMillis(); final List<Integer> l = new LinkedList<Integer>(); ThreadPoolExecutor tp = new ThreadPoolExecutor(100, 100, 60, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(20000)); final Random random = new Random(); for (int i = 0; i < 20000; i++) { tp.execute(new Runnable() { public void run() { l.add(random.nextInt()); } }); } tp.shutdown(); try { tp

线程池

旧时模样 提交于 2019-11-29 16:37:48
目录 线程池 1. 并发队列:阻塞队列和非阻塞队列 2. 线程池原理:ThreadPoolExecutor 底层原理解析 3. 线程池的分类 线程池 1. 并发队列:阻塞队列和非阻塞队列 区别如下: 入队: 非阻塞队列:当队列中满了的时候,放入数据,数据丢失 阻塞队列:当队列满了的时候,进行等待,什么时候队列中有出队的数据,那么第 11 个再放进入 出队: 非阻塞队列:如果现在队列中没有元素,取数据,得到的是 null 阻塞队列:等待,什么时候放进去,再取出来 线程池是使用阻塞队列 。 2. 线程池原理:ThreadPoolExecutor 底层原理解析 2. 1线程的生命周期 从出生到死亡的阶段。 2.2 线程池工作原理 ThreadPoolExecutor t = new ThreadPoolExecutor(1, 3, 0, TimeUnit.MICROSECONDS, new LinkedBlockingDeque<>(3)); 参数含义: 1:核心线程数 3:最大线程数 0 和 TimeUnit.MICROSECONDS :当任务量大于队列长度需要创建线程的时候,新创建的这个线程假如把队列的任务都执行完了,那么等待新任务的空闲时间就是这个 new LinkedBlockingDeque<>(3)) :阻塞队列: 方法有参数:队列长度为 3 方法无参数:队列长度为

大型网站背后的高性能系统架构设计,互联网架构师JAVA架构师,java架构设计,java大型网站架构设计

℡╲_俬逩灬. 提交于 2019-11-29 02:12:45
大型网站背后的高性能系统架构设计,互联网架构师JAVA架构师,java架构设计,java大型网站架构设计 1. 性能测试 1.1. 性能指标 网站性能测试的主要指标有: 响应时间 - 响应时间(RT)是指从客户端发一个请求开始计时,到客户端接收到从服务器端返回的响应结果结束所经历的时间,响应时间由请求发送时间、网络传输时间和服务器处理时间三部分组成。 并发数 - 系统同时处理的请求、事务数。 吞吐量 - TPS(每秒事务数)、HPS(每秒 HTTP 请求数)、QPS(每秒查询数)。 性能计数器 - 系统负载、对象与线程数、内存使用、CPU 使用、磁盘与网络 IO 等。这些指标也是系统监控的重要参数。 1.2. 性能测试方法 性能测试 负载测试 压力测试 稳定性测试 1.3. 性能测试报告 性能测试报告示例: 1.4. 性能优化策略 性能分析 - 如果请求响应慢,存在性能问题。需要对请求经历的各个环节逐一分析,排查可能出现性能瓶颈的地方,定位问题。检查监控数据,分析影响性能的主要因素:内存、磁盘、网络、CPU,可能是代码或架构设计不合理,又或者是系统资源确实不足。 性能优化 - 性能优化根据网站分层架构,大致可分为前端性能优化、应用服务性能优化、存储服务性能优化。 2. 前端性能优化 2.1. 浏览器访问优化 减少 HTTP 请求 - HTTP 请求需要建立通信链路,进行数据传输

秒杀系统性能测试和优化

独自空忆成欢 提交于 2019-11-29 00:47:23
对于大并发量的系统,有几个可能需要优化的点,下面我们要一步步测试来优化这个系统。 测试目标 对于一个系统,几个常用的评价指标是:平均响应时间、吞吐率、qps等。我的测试主要测试3个接口 主页(访问根路径,没有数据库交互) 秒杀接口暴露(暴露秒杀接口,有后台数据交互) 执行秒杀操作(插入秒杀成功记录和减库存一个完整的事务操作) 对于这三个接口,我们主要的测试目标和优化目标是平均响应时间,当然这是建立在数据正确返回的基础上的,失败率太高那这个平均响应时间是没有意义的。 这里的优化侧重于后端数据库和内存方面的优化。 测试环境 我是在Windows10下用jmeter来进行负载测试和压力测试,其他环境如下,涉及具体配置再提。 Tomcat8.0.38 Jdk1.8 hotspot vm Mysql 5.7 Redis 2.7.3 测试过程 首先进行主页测试 ,我们访问tomcat的主页,使用jmeter的线程组中的线程数模拟用户数, 不断增加线程数对主页进行性能测试 。 我们将结果数据写到一个xml文件中。首先我们模拟5000个用户同时请求主页。 5000个用户同时请求主页 设置循环次数为2,即一共有10000个请求将被发送。 从响应的结果可以看到,没有错误数,这10000个请求全部返回成功了,只是有的请求慢有的请求快。平均的响应时间在300ms, 50%的请求的响应时间平均为87ms。