线程数

JMeter性能测试,完整入门篇

。_饼干妹妹 提交于 2019-12-08 13:06:29
原文转自:https://blog.csdn.net/lovesoo/article/details/78579547 Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件。相比Loadrunner而言,JMeter小巧轻便且免费,逐渐成为了主流的性能测试工具,是每个测试人员都必须要掌握的工具之一。 本文为JMeter性能测试完整入门篇,从Jmeter下载安装到编写一个完整性能测试脚本、最终执行性能测试并分析性能测试结果。 运行环境为Windows 10系统,JDK版本为1.8,JMeter版本为3.3。 2. Jmeter安装 2.1 JDK安装 由于Jmeter是基于java开发,首先需要下载安装JDK (目前JMeter只支持到Java 8,尚不支持 Java 9) 1. 官网下载地址: http://www.oracle.com/technetwork/java/javase/downloads/index.html 2. 选择Java SE 8u151/ 8u152,点击JDK下载 3. 安装下载的JDK 4. 配置系统环境变量 2.2 JMeter安装 官网下载地址: http://jmeter.apache.org/download_jmeter.cgi 下载最新JMeter 3.3版本:apache-jmeter-3.3.zip

Tomcat的性能与最大并发(1000)

自古美人都是妖i 提交于 2019-12-07 14:16:08
当一个进程有 500 个线程在跑的话,那性能已经是很低很低了。Tomcat 默认配置的最大请求数是 150,也就是说同时支持 150 个并发,当然了,也可以将其改大。 当某个应用拥有 250 个以上并发的时候,应考虑应用服务器的集群。 具体能承载多少并发,需要看硬件的配置,CPU 越多性能越高,分配给 JVM 的内存越多性能也就越高,但也会加重 GC 的负担。 操作系统对于进程中的线程数有一定的限制: Windows 每个进程中的线程数不允许超过 2000 Linux 每个进程中的线程数不允许超过 1000 另外,在 Java 中每开启一个线程需要耗用 1MB 的 JVM 内存空间用于作为线程栈之用。 Tomcat的最大并发数是可以配置的,实际运用中,最大并发数与硬件性能和CPU数量都有很大关系的。更好的硬件,更多的处理器都会使Tomcat支持更多的并发。 Tomcat 默认的 HTTP 实现是采用阻塞式的 Socket 通信,每个请求都需要创建一个线程处理。这种模式下的并发量受到线程数的限制,但对于 Tomcat 来说几乎没有 BUG 存在了。 Tomcat 还可以配置 NIO 方式的 Socket 通信,在性能上高于阻塞式的,每个请求也不需要创建一个线程进行处理,并发能力比前者高。但没有阻塞式的成熟。 这个并发能力还与应用的逻辑密切相关,如果逻辑很复杂需要大量的计算

聊下并发和Tomcat线程数

一曲冷凌霜 提交于 2019-12-06 23:40:36
最近一直在解决线上一个问题,表现是:Tomcat每到凌晨会有一个高峰,峰值的并发达到了3000以上,最后的结果是Tomcat线程池满了,日志看很多请求超过了1s。服务器性能很好,Tomcat版本是7.0.54,配置如下: <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="3000" minSpareThreads="800"/> <Connector executor="tomcatThreadPool" port="8084" protocol="org.apache.coyote.http11.Http11AprProtocol" connectionTimeout="60000" keepAliveTimeout="30000" maxKeepAliveRequests="8000" maxHttpHeaderSize="8192" URIEncoding="UTF-8" enableLookups="false" acceptCount="1000" disableUploadTimeout="true" redirectPort="8443" /> 事后thread dump看其实真正处于RUNNABLE状态的线程很少,绝大部分线程都处于TIMED_WAITING状态:

从构建分布式秒杀系统聊聊限流特技

谁都会走 提交于 2019-12-06 21:00:58
前言 俗话说的好,冰冻三尺非一日之寒,滴水穿石非一日之功,罗马也不是一天就建成的。两周前秒杀案例初步成型,分享到了中国最大的同 性友网站-码云。同时也收到了不少小伙伴的建议和投诉。我从不认为分布式、集群、秒杀这些就应该是大厂的专利,在互联网的今天无论什么时候都要时刻武装自己,只有这样,也许你的春天就在明天。 在开发秒杀系统案例的过程中,前面主要分享了队列、缓存、锁和分布式锁以及静态化等等。缓存的目的是为了提升系统访问速度和增强系统的处理能力;分布式锁解决了集群下数据的安全一致性问题;静态化无疑是减轻了缓存以及DB层的压力。 限流 然而再牛逼的机器,再优化的设计,对于特殊场景我们也是要特殊处理的。就拿秒杀来说,可能会有百万级别的用户进行抢购,而商品数量远远小于用户数量。如果这些请求都进入队列或者查询缓存,对于最终结果没有任何意义,徒增后台华丽的数据。对此,为了减少资源浪费,减轻后端压力,我们还需要对秒杀进行限流,只需保障部分用户服务正常即可。 就秒杀接口来说,当访问频率或者并发请求超过其承受范围的时候,这时候我们就要考虑限流来保证接口的可用性,以防止非预期的请求对系统压力过大而引起的系统瘫痪。通常的策略就是拒绝多余的访问,或者让多余的访问排队等待服务。 限流算法 任何限流都不是漫无目的的,也不是一个开关就可以解决的问题,常用的限流算法有:令牌桶,漏桶。 令牌桶 令牌桶算法是网络流量整

Tomcat虚拟机配置与优化

妖精的绣舞 提交于 2019-12-06 17:11:14
Tomcat虚拟主机配置 某些时候公司有多个项目同时运行时,一台服务器不建议运行多个Tomcat服务,需要配置虚拟主机 通过两个域名访问到不同的项目内容 步骤 1.创建www和bbs项目 目录和文件 2.修改Tomcat主配置文件 3.重启Tomcat服务 4.测试 Tomcat优化 Tomcat 的缺省配置并不适合生产环境,它会频繁出现假死现象需要重启,只有通过不断压测优化才能让它最高效率稳定的运行。优化主要有三方面,分为操作系统优化(内核参数优化),Tomcat 配置文件参数优化,Java 虚拟机(JVM)调优。 Tomcat常用的优化相关参数 【maxThreads】Tomcat 使用线程来处理接收的每个请求,这个值表示 Tomcat 可创建的最 大的线程数,默认值是 200。 【minSpareThreads】最小空闲线程数,Tomcat 启动时的初始化的线程数,表示即使没有 人使用也开这么多空线程等待,默认值是 10 【maxSpareThreads】最大备用线程数,一旦创建的线程超过这个值,Tomcat 就会关闭不 再需要的 socket 线程。默认值是-1(无限制)。一般不需要指定 【URIEncoding】指定 Tomcat 容器的 URL 编码格式,语言编码格式这块倒不如其它 Web 服务器软件配置方便,需要分别指定 【connnectionTimeout

java线程池源码的理解

亡梦爱人 提交于 2019-12-06 15:27:13
概念 所谓线程池,就是有一个池子,里面存放着已经创建好的线程,当有任务提交到线程池执行时,池子中的某个线程会主动执行该任务. 主要流程 execute() –> addWorker() –>runWorker() -> getTask() 重要参数及变量 控制状态的变量 ctl: ctl是一个AtomicInteger原子操作类,能够保证线程安全。 ctl变量定义如下: private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0)); private static int ctlOf(int rs, int wc) { return rs | wc; } 详细讲解如下: The main pool control state, ctl, is an atomic integer packing two conceptual fields workerCount, indicating the effective number of threads runState, indicating whether running, shutting down etc 大概意思是:通过对ctl的运算,能够得到两个重要的变量,workerCount(worker线程数量)和runState(线程池运行状态)。

详解Tomcat线程池原理及参数释义

一笑奈何 提交于 2019-12-06 13:52:07
omcat线程池有如下参数: maxThreads, 最大线程数,tomcat能创建来处理请求的最大线程数 maxSpareTHreads, 最大空闲线程数,在最大空闲时间内活跃过,但现在处于空闲,若空闲时间大于最大空闲时 间,则回收,小于则继续存活,等待被调度。 minSpareTHreads,最小空闲线程数,无论如何都会存活的最小线程数 acceptCount, 最大等待队列数 ,请求并发大于tomcat线程池的处理能力,则被放入等待队列等待被处理。 maxIdleTime, 最大空闲时间,超过这个空闲时间,且线程数大于最小空闲数的,都会被回收 1.一张图看懂tomcat线程池。 tomcat原理如上图。Tomcat线程池在工作的时候,实际情况是:以上述线程池为例,一开始就创建最小空闲数的线程在池里,20个,当同一时间请求数量大于最小空闲数20,比如来了50个并发请求,那么线程池还需要创建30个线程来处理请求。这时候当请求都处理完了,持续来的请求低于50个的时候,那么当时间过了60秒,并发数还是没有达到50,那么从第50个线程开始,线程池将按照,空闲时间达到60s的,开始逐个回收,49个,48个,47个,如此回收。如果并发请求小于20个,那么线程池会回收至20个的时候,停止回收,这就是最小空闲数的作用,即使一个请求都没有,那么线程池也得保证随时都有20个。所谓空闲回收是指

java之线程

馋奶兔 提交于 2019-12-06 10:08:35
1、线程与进程    线程(thread):线程是运行的程序单元,依托于进程存在。一个进程可以包含多个线程,多线程可以共享一块内存空间和一组系统资源。   进程(processes):进程是程序的一次动态执行,通常每一个进程都拥有自己独立的内存空间和系统资源 2、线程的创建 继承Thread类,重写run方法 实现runnable接口,实现run方法 实现Callable接口,实现call方法 lambda表达式创建线程   1)、继承thread类,代码实现; class ThreadTest{ public static void main(String[] args) throws Exception{ MyThread thresd = new MyThread(); thread.start(); } } class MyThread extends Thread{ @Override public void run(){ System.out.println("123"): } }    2)、实现runnable接口,代码实现 class ThreadTest{ publiic static void main(String[] args){ MyRunnable runnable = new MyRunnable (); new Thread(runnable)

突然想看看线程池

萝らか妹 提交于 2019-12-06 08:50:15
1 为何要适用线程池   首先我们知道线程对于操作系统来说是一种 珍贵的资源 ,像我们如果每次使用到的时候手动创建,线程执行完run()方法后又自动关闭,下次用的时候还得手动创建,这样无论对于操作系统还是我们来说都是一种 时间 和 资源 的浪费,所以我们可以选择维护一些线程,这些线程在执行完任务之后继续执行其他收到的任务,从而实现资源的 复用 ,这些线程就构成了平时说的 线程池 。其能带来许多的好处,比如: 实现线程资源复用 。减少手动关闭线程的资源浪费。 一定幅度提升响应速度 。在线程池承受范围内(指还能接收任务的状态)线程可以直接使用,而不用进行手动创建。 方便线程的管理 。把线程集中在一起可以让我们统一的设置其状态或者超时的时间等,从而达到我们预期的状态,此外还能减少 OOM 的发生,比如说如果我们因为一些失误操作而导致在某个地方不断的创建线程,那么会导致系统奔溃,但是如果使用线程池我们可以设定同时执行任务的线程上限和能接收的最大任务数,可以很好的避免这种情况。(当然这是建立在你的最大线程数和任务数处于合理的范围内) 我们知道在线程的生命周期中(关于线程生命周期可以看看我的另一篇文章—— Java线程状态和关闭线程的正确姿势 ),线程正常执行完 run() 方法就结束进入终止状态了,那么线程池是 如何实现一个线程在执行完一个任务之后不进入死亡而继续执行其他任务的呢 ? 2

用 ThreadPoolExecutor/ThreadPoolTaskExecutor 线程池技术提高系统吞吐量(附带线程池参数详解和使用注意事项)

隐身守侯 提交于 2019-12-06 08:17:36
转载:https://blog.csdn.net/f641385712/article/details/80832636 相关阅读 【小家java】java5新特性(简述十大新特性) 重要一跃 【小家java】java6新特性(简述十大新特性) 鸡肋升级 【小家java】java7新特性(简述八大新特性) 不温不火 【小家java】java8新特性(简述十大新特性) 饱受赞誉 【小家java】java9新特性(简述十大新特性) 褒贬不一 【小家java】java10新特性(简述十大新特性) 小步迭代 【小家java】java11新特性(简述八大新特性) 首个重磅LTS版本 【小家java】Java中的线程池,你真的用对了吗?(教你用正确的姿势使用线程池) 小家Java】一次Java线程池误用(newFixedThreadPool)引发的线上血案和总结 【小家java】BlockingQueue阻塞队列详解以及5大实现(ArrayBlockingQueue、DelayQueue、LinkedBlockingQueue…) 每篇一句 烧不死的鸟才是火凤凰,烧死了就变成烤乳鸽了。 1、概述 在Java中,我们一般通过集成Thread类和实现Runnnable接口,调用线程的start()方法实现线程的启动。但如果并发的数量很多,而且每个线程都是执行很短的时间便结束了