
性能评估
王树民
大JAVA
展开
-
服务出现TCP连接快速增加尤其是NON_ESTABLISHED大量增加导致内存和CPU暴增系统无法使用的问题
TCP状态转移要点TCP协议规定,对于已经建立的连接,网络双方要进行四次握手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死状态,连接本身占用的资源不 会被释放。网络服务器程序要同时管理大量连接,所以很有必要保证无用连接完全断开,否则大量僵死的连接会浪费许多服务器资源。在众多TCP状态中,最值得 注意的状态有两个:CLOSE_WAIT和TIME_WAIT。1、LISTENING状态FTP服务启动后首先处于侦听(LISTENING)状态。2、ESTABLISHED状态ES...原创 2020-12-07 17:49:00 · 6401 阅读 · 0 评论 -
arthas现实了不停机、不发包替换了生产环境的Java代码
arthas现实了不停机、不发包替换了生产环境的Java代码线上代码热更新(动态修改上线项目代码)手动在代码中抛异常,不停机不重新发包的情况下,修改线上代码启动服务也达到我们预期异常替换代码的流程:1、jad命令将需要更改的文件先进行反编译,保存下来 ,编译器修改$ jad --source--only com.example.demo.DemoApplication > /data/DemoApplication.java1修改完以后需要将类重新加载到JVM.原创 2020-10-27 16:08:17 · 553 阅读 · 0 评论 -
Arthas - Java 线上问题定位处理的终极利器
前言在使用Arthas之前,当遇到 Java 线上问题时,如 CPU 飙升、负载突高、内存溢出等问题,你需要查命令,查网络,然后 jps、jstack、jmap、jhat、jstat、hprof 等一通操作。最终焦头烂额,还不一定能查出问题所在。而现在,大多数的常见问题你都可以使用Arthas轻松定位,迅速解决,及时止损,准时下班。1、Arthas 介绍Arthas是Alibaba在 2018 年 9 月开源的Java 诊断工具。支持JDK6+, 采用命令行交互...原创 2020-10-27 15:46:31 · 471 阅读 · 0 评论 -
PostgreSQL配置优化
PostgreSQL配置优化 硬件和系统配置 测试工具 配置文件 主要选项 测试数据 总结 硬件和系统配置操作系统 Ubuntu13.04 系统位数 64 CPU Intel(R) Core(TM)2 Duo CPU 内存 4G 硬盘 Seagate ST2000DM001-1CH164 测试工具 PostgreSQL-9.1.11 测试工具工具名称 pgbench...原创 2020-08-12 09:48:38 · 292 阅读 · 0 评论 -
如何使用 Docker 来限制 CPU、内存和 IO等资源?
2017-08-18 07:32在使用 Docker 运行容器时,一台主机上可能会运行几百个容器,这些容器虽然互相隔离,但是底层却使用着相同的 CPU、内存和磁盘资源。如果不对容器使用的资源进行限制,那么容器之间会互相影响,小的来说会导致容器资源使用不公平;大的来说,可能会导致主机和集群资源耗尽,服务完全不可用。Docker 作为容器的管理者,自然提供了控制容器资源的功能。正如使用内核的 namespace 来做容器之间的隔离,Docker 也是通过内核的 cgroups 来做容器的资源限制。...原创 2020-08-10 16:50:09 · 2245 阅读 · 0 评论 -
Kafka压力测试(写入MQ消息压测和消费MQ消息压测)
1.测试目的 本次性能测试在正式环境下单台服务器上Kafka处理MQ消息能力进行压力测试。测试包括对Kafka写入MQ消息和消费MQ消息进行压力测试,根据10w、100w和1000w级别的消息处理结果,评估Kafka的处理性能是否满足项目需求。(该项目期望Kafka能够处理上亿级别的MQ消息)2.测试范围及方法2.1测试范围概述 测试使用Kafka自带的测试脚本,通过命令对Kafka发起写入MQ消息和Kafka消费MQ消息的请求。模拟不同数量级的MQ消息写...原创 2020-08-10 14:02:59 · 464 阅读 · 0 评论 -
【kafka压测】关于kafka性能压测(kafka内置压测工具)
使用Jmeter压测Kafka:https://www.blazemeter.com/blog/apache-kafka-how-to-load-test-with-jmeter/Kafka压力测试(写入MQ消息压测和消费MQ消息压测):https://blog.csdn.net/laofashi2015/article/details/81111466kafka内置压测://生产压测bin/kafka-producer-perf-test.sh --topic test_perf...原创 2020-08-10 13:56:15 · 1059 阅读 · 0 评论 -
PostgreSQL配置优化
PostgreSQL配置优化 硬件和系统配置 测试工具 配置文件 主要选项 测试数据 总结 硬件和系统配置操作系统 Ubuntu13.04 系统位数 64 CPU Intel(R) Core(TM)2 Duo CPU 内存 4G 硬盘 Seagate ST2000DM001-1CH164 测试工具 PostgreSQL-9.1.11 测试工具工具名称 pgbench...原创 2020-08-06 10:31:06 · 986 阅读 · 0 评论 -
PostgreSQL 参数调整(性能优化)
昨天分别在外网和无外网环境下安装PostgreSQL,有外网环境下安装的相当顺利。但是在无外网环境下就是两个不同的概念了,可谓十有八折。感兴趣的同学可以搭建一下。PostgreSQL安装完成后第一件事便是做相关测试,然后调整参数。/*CPU查看CPU型号*/cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c/*查看物理CPU个数*/cat /proc/cpuinfo | grep "physical id" | sor...原创 2020-08-05 15:53:48 · 3834 阅读 · 0 评论 -
文件操作liunx
原创 2020-07-30 14:13:13 · 132 阅读 · 0 评论 -
HTTP请求协议头部字段-Connection=keepalive
关于一个 TCP 连接可以对应几个 HTTP 请求:链接:https://zhuanlan.zhihu.com/p/61423830https://zhuanlan.zhihu.com/p/90765146在HTTP1.0官方协议中并没有对keepalive的明确支持,所有的HTTP请求是如下流程:1.client 发起一个请求;2.server收到请求后,回复一个响应;3.连接关闭。如果要在HTTP1.0中支持keep alive,你必须明确的在header中加入Co...原创 2020-07-16 17:49:21 · 3933 阅读 · 0 评论 -
ubuntu中解决进程的time_wait和FIN_WAIT2状态
TIMEWAIT状态本身和应用层的客户端或者服务器是没有关系的。如果你的程序设计为服务器主动关闭,那么你才有可能需要关注这个TIMEWAIT状态过多的问题。如果你的服务器设计为被动关闭,那么你首先要关注的是CLOSE_WAIT。1大量TIMEWAIT出现在业务上在高并发短连接的TCP服务器上,当服务器处理完请求后立刻按照主动正常关闭连接。。。这个场景下,会出现大量socket处于TIMEWAIT状态。如果客户端的并发量持续很高,此时部分客户端就会显示连接不上。1业务上两个方面需要注意...原创 2020-07-16 16:24:52 · 1850 阅读 · 0 评论 -
dirty_ratio与dirty_background_ratio参数区别--系统优化必选
vm.dirty_background_ratio:这个参数指定了当文件系统缓存脏页数量达到系统内存百分之多少时(如5%)就会触发pdflush/flush/kdmflush等后台回写进程运行,将一定缓存的脏页异步地刷入磁盘;vm.dirty_ratio:而这个参数则指定了当文件系统缓存脏页数量达到系统内存百分之多少时(如10%),系统不得不开始处理缓存脏页(因为此时脏页数量已经比较多,为了避免数据丢失需要将一定脏页刷入磁盘);在此过程中很多应用进程可能会因为系统转而处理文件IO而...原创 2020-07-13 10:00:35 · 852 阅读 · 0 评论 -
Linux使用sar进行性能分析
sar简介sar命令常用格式sar常用性能数据分析整体CPU使用统计(-u)各个CPU使用统计(-P)内存使用情况统计(-r)整体I/O情况(-b)各个I/O设备情况(-d)网络统计(-n)sar日志保存(-o)References:sar简介sar(System Activity Reporter, 系统活动情况报告): 是用于监控Linux系统各个性能的优秀工具,包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等。s.原创 2020-07-01 17:03:11 · 319 阅读 · 0 评论 -
ElasticSearch CPU和内存占用高的优化记录出现GC
公司最近使用ElasticSearch作为数据报表汇总引擎.上线三个月累计数据800万,但是今天突然大面积出现查询超时,上服务器查看服务运行情况,发现cpu使用率高达300% mem 使用率也到了90%,下面记录了整个排查问题的过程 1.首先查看elastic cpu和mem占用情况 //首先查看所有进程# top//找到对应的elasticserch运行的PID,查看占用内存比较高的线程,Ctrl+c 退出#top -Hp 123...原创 2020-07-01 13:07:37 · 6893 阅读 · 0 评论 -
ElasticSearch6.3.2 中的JVM性能调优
前一段时间被人问了个问题:在使用ES的过程中有没有做过什么JVM调优措施?在我搭建ES集群过程中,参照important-settings官方文档来的,并没有对JVM参数做过多的调整。但谈到JVM配置参数,少不了操作系统层面上的一些配置参数,比如 page cache 和文件描述符的个数:(/etc/security/limits.conf)。另外ES jvm.options配置文件也针对JVM参数做了一些优化,这里简要介绍一下ElasticSearch中与jvm相关的各个配置参数: 将 X...原创 2020-07-01 13:02:25 · 627 阅读 · 0 评论 -
elasticsearch jvm优化
测试环境elasticsearch jvm 4G jdk1.8[serveradm@test-log-server elasticsearch]$ java -versionjava version "1.8.0_212"Java(TM) SE Runtime Environment (build 1.8.0_212-b10)Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)[serveradm@test-lo...原创 2020-07-01 12:47:07 · 967 阅读 · 1 评论 -
Java内存区域(运行时数据区域)和内存模型(JMM)
Java 内存区域和内存模型是不一样的东西,内存区域是指 Jvm 运行时将数据分区域存储,强调对内存空间的划分。而内存模型(Java Memory Model,简称 JMM )是定义了线程和主内存之间的抽象关系,即 JMM 定义了 JVM 在计算机内存(RAM)中的工作方式,如果我们要想深入了解Java并发编程,就要先理解好Java内存模型。Java运行时数据区域众所周知,Java 虚拟机有自动内存管理机制,如果出现内存泄漏和溢出方面的问题,排查错误就必须要了解虚拟机是怎样使用内存的。...原创 2020-07-01 10:22:48 · 2134 阅读 · 1 评论 -
Java内存管理-初始JVM和JVM启动流程(二)
上一篇分享了什么是程序,以及Java程序运行的三个阶段。也顺便提到了Java中比较重要的一个东西就是JVM(JAVA 虚拟机),那么今天在先了解一下JVM和JVM的启动流程。知识地图:1、什么是虚拟机虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。【百度百科】虚拟机通过仿真引擎(称为管理程序)处理虚拟硬件,包括CPU、内存、硬盘驱动器、网络接口和其他设备。虚拟机管理程序提供的虚拟硬件设备映射到物理机器上...原创 2020-07-01 10:15:36 · 287 阅读 · 0 评论 -
Java内存管理-JVM内存模型以及JDK7和JDK8内存模型对比总结(三)
Java内存管理-JVM内存模型以及JDK7和JDK8内存模型对比总结(三)上一篇分享了JVM及其启动流程,今天介绍一下JVM内部的一些区域,以及具体的区域在运行过程中会发生哪些异内存常! 其实也就对应了内存管理的第一篇中 JVM的第三个阶段,程序运行内存溢出。知识地图:一、概述Java的内存管理采用[自动内存管理]机制,因为这个自动管理机制,Java程序员就不需要去写释放内存的代码,而且不容易出现内存泄漏问题(比C/C++程序员少一些烦恼)。但是由于内存的申请和释放都交给了Jav.原创 2020-07-01 10:13:28 · 798 阅读 · 0 评论 -
频繁GC (Allocation Failure)及young gc时间过长分析
序本文主要分析一个频繁GC (Allocation Failure)及young gc时间过长的case。症状gc throughput percent逐步下降,从一般的99.96%逐步下降,跌破99%,进入98%,最低点能到94% young gc time逐步增加,从一般的十几毫秒逐步上升,突破50,再突破100,150,200,250 在8.5天的时间内,发生了9000多次gc,其中full gc为4次,平均将近8秒,大部分是young gc(allocation f...原创 2020-07-01 09:51:51 · 9174 阅读 · 1 评论 -
ss - 研究套接字的另一个实用程序
参数Usage: ss [ OPTIONS ] ss [ OPTIONS ] [ FILTER ] -h, --help this message #显示帮助菜单 -V, --version output version information #输出版本信息 -n, --numeric don't resolve service names #不解析服务名 -r, --resolve ...原创 2020-06-30 22:10:36 · 160 阅读 · 0 评论 -
Arthas:线上问题排查工具
安装#下载Copyjava -jar arthas-boot.jar 查看版本:#CopyD:\Program Files\arthas $ java -jar arthas-boot.jar -version [INFO] arthas-boot version: 3.1.0 Local versions: 3.1.0 Remote versions: 3.1.0 3.0.5 3.0.4 3.0.3 3.0.0-RC 3.0.5 命令使用#启动ar...原创 2020-06-30 14:28:21 · 1854 阅读 · 0 评论 -
jstat查看gc情况
jstat通常用来分析系统的垃圾回收情况。1)命令:jstat -gccause pid 2000 #每格2秒输出结果或jstat -gcutil pid 20002)分析:S0、S1 代表两个Survivor区;E 代表 Eden 区;O(Old)代表老年代;P(Permanent)代表永久代;YGC(Young GC)代表Minor GC;YGCT代表Minor GC耗时;FGC(Full GC)代表Full GC耗时;GCT代表Minor & ...原创 2020-06-30 14:01:33 · 13926 阅读 · 2 评论 -
elasticsearch 的日志gc
[2018-06-30T17:57:23,848][WARN ][o.e.m.j.JvmGcMonitorService] [qoo--eS] [gc][228384] overhead, spent [2.2s] collecting in the last [2.3s][2018-06-30T17:57:29,020][INFO ][o.e.m.j.JvmGcMonitorService] [qoo--eS] [gc][old][228385][160772] duration [5s...原创 2020-06-30 13:42:27 · 1491 阅读 · 0 评论 -
elasticsearch 性能优化
#系统默认的最大打开文件数的限制vi /etc/security/limits.conf* - nproc 50240 * - nofile 20480 #65535*-npro20480*-nofile65535*-...原创 2020-06-28 23:25:07 · 712 阅读 · 0 评论 -
linux分析利刃之sar命令详解
目录一、sar的概述 二、统计CPU使用情况 三、平均负载统计分析 四、内存统计分析 五、统计swap分区 六、查看磁盘IO 七、查看磁盘使用情况 八、网络使用分析 九、进程,文件状态 十、常用命令回到顶部一、sar的概述 在我使用的众多linux分析工具中,sar是一个非常全面的一个分析工具,可以比较瑞士军刀,对文件的读写,系统调用的使用情况,磁盘IO,CPU相关使用情况,内存使用情况,进程活动等都可以进行有效的分析。sar工具将对系统当前的状态进...原创 2020-06-28 10:07:25 · 495 阅读 · 0 评论 -
TCP 这几个参数
每日一句英语学习,每天进步一点点:前言TCP 性能的提升不仅考察 TCP 的理论知识,还考察了对于操作系统提供的内核参数的理解与应用。TCP 协议是由操作系统实现,所以操作系统提供了不少调节 TCP 的参数。Linux TCP 参数如何正确有效的使用这些参数,来提高 TCP 性能是一个不那么简单事情。我们需要针对 TCP 每个阶段的问题来对症下药,而不是病急乱投医。接下来,将以三个角度来阐述提升 TCP 的策略,分别是: TCP 三次握手的性能提升; ...转载 2020-06-28 06:59:55 · 528 阅读 · 0 评论 -
一次大量TIME_WAIT和Recv-Q 堵塞问题排查思路
第一天故障:现象:公司销售群和售后群炸了,说老后台(1.0版本)崩溃了,因为还有部门的业务没来得及迁移到新后台,我当时正在打农药哈哈~后台504打不开,偶尔能刷出来也是很慢。。大概过了10分钟新后台也挂了,也就是公司所有业务全瘫痪了。。。问题严重了。。。排查及原因:先登陆到我们比较重视的新后台查看,有慢日志看慢日志没有慢日志先加慢日志。简单查看了一下top 发现load较高,有时候能到20左右,忽高忽低不是很稳定,其他都还算正常。。接着netstat大法查看下连接数情况,...原创 2020-06-28 06:37:18 · 4062 阅读 · 0 评论 -
Linux netstat命令详解及state的含义
libaineu2004 2018-09-06 17:39:49 4986 已收藏 6分类专栏: Linux 网络基础知识Web/Net Linux网络编程实践及经典文章收集版权Linux:netstat -nalp|grep 1883 #查看1883端口的连接情况,观察TCP状态图netstat -nalp|grep 1883|wc -l #查看1883端口的客户端连接数ulimit -n 5120000 #修改当前进程的最大文件数tail -f *.log #实时查看...原创 2020-06-28 06:28:55 · 1005 阅读 · 0 评论 -
Linux下netstat命令详解
一、介绍Netstat是控制台命令,是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。二、输出信息描述执行netstat后输出如下:[root@sy-suz-srv51 ~]# netstatActive Internet connections (w/o servers)Proto Recv-Q Send-Q Lo..原创 2020-06-28 06:25:32 · 430 阅读 · 0 评论 -
优化Linux内核参数
vim /etc/sysctl.conf1、net.ipv4.tcp_max_syn_backlog = 65536记录的那些尚未收到客户端确认信息的连接请求的最大值。对于超过128M内存的系统而言,缺省值是1024,低于128M小内存的系统则是128。SYN Flood攻击利用TCP协议散布握手的缺陷,伪造虚假源IP地址发送大量TCP-SYN半打开连接到目标系统,最终导致目标系统Socket队列资源耗尽而无法接受新的连接。为了应付这种攻击,现代Unix系统中普遍采用多连接队列处理的方式来...原创 2020-06-26 23:06:53 · 338 阅读 · 0 评论 -
Nginx的10万并发内核参数优化
关于内核参数的优化:net.ipv4.tcp_max_tw_buckets = 6000timewait的数量,默认是180000。net.ipv4.ip_local_port_range = 1024 65000允许系统打开的端口范围。net.ipv4.tcp_tw_recycle = 1启用timewait快速回收。net.ipv4.tcp_tw_reuse = 1开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接。net.ipv4.tcp_syncook...原创 2020-06-26 08:45:09 · 567 阅读 · 0 评论 -
高并发有关的内核参数
业务起来了,并发上来了,高峰时期也达到1.6wrps了,长连接数量达到了5w,为了生存,才研究如何提高并发。1. net.core.netdev_max_backlognet.core.netdev_max_backlog参数表示网卡接受数据包的队列最大长度,在阿里云服务器上,默认值是1000,可以适当调整。2. net.core.somaxconnnet.core.somaxconn参数决定了端口监听队列的最大长度,存放的是已经处于ESTABLISHED而没有被用户程序(ngin...原创 2020-06-26 08:41:29 · 444 阅读 · 0 评论 -
inux内核调优tcp_max_syn_backlog和somaxconn的区别
wjw555关注1人评论12143人阅读2018-04-18 11:29:50The behavior of the backlog argument on TCP sockets changed with Linux 2.2. Now it specifies the queue length for completely established sockets waiting to be accepted, instead of the number of ...原创 2020-06-25 22:38:15 · 360 阅读 · 0 评论 -
Linux下解决高并发socket最大连接数所受的各种限制(解除IO限制)
linux作为服务器系统,当运行高并发TCP程序时,通常会出现连接建立到一定个数后不能再建立连接的情况 本人在工作时,测试高并发tcp程序(GPS服务器端程序),多次测试,发现每次连接建立到3800左右时,再也不能建立tcp连接,最总上网搜索,参考:http://blog.csdn.net/guowake/article/details/6615728解决了连接限制的问题,此处记录下来,方便日后工作继续使用,虽然参考博文中内容有点多,文中所描述的内容也不怎么明白,但总结下来,按如下几步操作即...原创 2020-06-25 22:34:41 · 717 阅读 · 0 评论 -
Linux下查看并发连接数
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'我解释一下,如果有不对的,请高手指教。/^tcp/ # 搜索以tcp开头的行S[$NF] 以$NF为数组下标,建立数组S++S[$NF] 给数组S赋值,相当于有一个tcp那么这个S数组里的元素就+1/^tcp/ {++S[$NF]} 整个意思应该是 匹配出一个tcp协议的连接 数组S就+一个元素值END是前面的/^tcp/ {++S[$NF]} 执...原创 2020-06-25 22:22:02 · 692 阅读 · 0 评论 -
高并发TCP连接数目问题
linux可通过五元组唯一确定一个链接:源IP,源端口,目的IP,目的端口,传输层协议。而一个端口不允许被两个及以上进程占用(一个进程可同时占用多个端口),据此是否可以推测一台linux服务器最多可以同时处理2^16(65536,或65K)个链接即并发请求呢?一台服务器到底能够支持多少TCP并发连接呢?1. 文件描述符限制对于服务器来说,每一个TCP连接都要占用一个文件描述符,一旦文件描述符使用完,新的连接到来返回给我们的错误是"Socket/File:Can't open so many...原创 2020-06-25 22:16:43 · 3145 阅读 · 3 评论 -
本文详解高并发场景下backlog的配置和作用
环境介绍: PHP 7.3.5 +nginx/1.16.0 +Linux VM_0_15_centos 3.10.0-514.26.2.el7.x86_64backlog定义:已连接但未进行accept处理的SOCKET队列大小,并非syn的SOCKET队列。如果这个队列满了,将会发送一个ECONNREFUSED错误信息给到客户端,即 linux 头文件 /usr/include/asm-generic/errno.h中定义的“Connection refused”...原创 2020-06-25 22:11:01 · 1541 阅读 · 0 评论 -
浅谈tcp socket的backlog参数
最近看netty源码碰到ChannelOption.SO_BACKLOG参数,通过跟踪代码发现其实是用于设置底层tcp socket的backlog参数,由于不了解这个参数,有必要彻底的理解一下。TCP三次握手底层实现backlog参数主要用于底层方法int listen(int sockfd, int backlog), 在解释backlog参数之前,我们先了解下tcp在内核的请求过程,其实就是tcp的三次握手:1、client发送SYN到server,将状态修改为SYN_SEND,如...原创 2020-06-25 21:53:52 · 359 阅读 · 0 评论