JasonsGong.github.io/posts/1416.html
2024-04-02 13:00:25 +08:00

341 lines
37 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html><html lang="zh-CN" data-theme="light"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0,viewport-fit=cover"><title>压力测试与性能监控 | The Blog</title><meta name="author" content="Jason"><meta name="copyright" content="Jason"><meta name="format-detection" content="telephone=no"><meta name="theme-color" content="#ffffff"><meta name="description" content="一.压力测试性能指标 响应时间Response Time: RT响应时间指用户从客户端发起一个请求开始到客户端接收到从服务器端返回的响应结束整个过程所耗费的时间。 HPSHits Per Second :每秒点击次数,单位是次&#x2F;秒。 TPSTransaction per Second系统每秒处理交易数单位是笔&#x2F;秒。 QPSQuery per Sec">
<meta property="og:type" content="article">
<meta property="og:title" content="压力测试与性能监控">
<meta property="og:url" content="https://jasonsgong.gitee.io/posts/1416.html">
<meta property="og:site_name" content="The Blog">
<meta property="og:description" content="一.压力测试性能指标 响应时间Response Time: RT响应时间指用户从客户端发起一个请求开始到客户端接收到从服务器端返回的响应结束整个过程所耗费的时间。 HPSHits Per Second :每秒点击次数,单位是次&#x2F;秒。 TPSTransaction per Second系统每秒处理交易数单位是笔&#x2F;秒。 QPSQuery per Sec">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://jasonsgong.gitee.io/img/1.png">
<meta property="article:published_time" content="2023-07-09T08:00:10.000Z">
<meta property="article:modified_time" content="2024-01-05T13:51:58.807Z">
<meta property="article:author" content="Jason">
<meta property="article:tag" content="测试">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://jasonsgong.gitee.io/img/1.png"><link rel="shortcut icon" href="/img/%E5%9B%BE%E6%A0%87.png"><link rel="canonical" href="https://jasonsgong.gitee.io/posts/1416.html"><link rel="preconnect" href="//fastly.jsdelivr.net"/><link rel="preconnect" href="//hm.baidu.com"/><link rel="preconnect" href="//busuanzi.ibruce.info"/><link rel="stylesheet" href="/css/index.css"><link rel="stylesheet" href="/cdn/icon/fontawesome-free/css/all.min.css" media="print" onload="this.media='all'"><link rel="stylesheet" href="/cdn/css/snackbar.min.css" media="print" onload="this.media='all'"><link rel="stylesheet" href="/cdn/css/fancybox.min.css" media="print" onload="this.media='all'"><script>var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?aad83e413776c1cd5d11ed7eeedd98f7";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script><script>const GLOBAL_CONFIG = {
root: '/',
algolia: undefined,
localSearch: {"path":"/search.xml","preload":true,"top_n_per_article":1,"unescape":false,"languages":{"hits_empty":"找不到您查询的内容:${query}","hits_stats":"共找到 ${hits} 篇文章"}},
translate: undefined,
noticeOutdate: undefined,
highlight: {"plugin":"highlighjs","highlightCopy":true,"highlightLang":true,"highlightHeightLimit":400},
copy: {
success: '复制成功',
error: '复制错误',
noSupport: '浏览器不支持'
},
relativeDate: {
homepage: true,
post: true
},
runtime: '天',
dateSuffix: {
just: '刚刚',
min: '分钟前',
hour: '小时前',
day: '天前',
month: '个月前'
},
copyright: undefined,
lightbox: 'mediumZoom',
Snackbar: {"chs_to_cht":"你已切换为繁体","cht_to_chs":"你已切换为简体","day_to_night":"你已切换为深色模式","night_to_day":"你已切换为浅色模式","bgLight":"#006650","bgDark":"#006650","position":"top-center"},
source: {
justifiedGallery: {
js: 'https://fastly.jsdelivr.net/npm/flickr-justified-gallery/dist/fjGallery.min.js',
css: 'https://fastly.jsdelivr.net/npm/flickr-justified-gallery/dist/fjGallery.min.css'
}
},
isPhotoFigcaption: false,
islazyload: false,
isAnchor: true,
percent: {
toc: true,
rightside: false,
},
autoDarkmode: true
}</script><script id="config-diff">var GLOBAL_CONFIG_SITE = {
title: '压力测试与性能监控',
isPost: true,
isHome: false,
isHighlightShrink: false,
isToc: true,
postUpdate: '2024-01-05 21:51:58'
}</script><noscript><style type="text/css">
#nav {
opacity: 1
}
.justified-gallery img {
opacity: 1
}
#recent-posts time,
#post-meta time {
display: inline !important
}
</style></noscript><script>(win=>{
win.saveToLocal = {
set: function setWithExpiry(key, value, ttl) {
if (ttl === 0) return
const now = new Date()
const expiryDay = ttl * 86400000
const item = {
value: value,
expiry: now.getTime() + expiryDay,
}
localStorage.setItem(key, JSON.stringify(item))
},
get: function getWithExpiry(key) {
const itemStr = localStorage.getItem(key)
if (!itemStr) {
return undefined
}
const item = JSON.parse(itemStr)
const now = new Date()
if (now.getTime() > item.expiry) {
localStorage.removeItem(key)
return undefined
}
return item.value
}
}
win.getScript = url => new Promise((resolve, reject) => {
const script = document.createElement('script')
script.src = url
script.async = true
script.onerror = reject
script.onload = script.onreadystatechange = function() {
const loadState = this.readyState
if (loadState && loadState !== 'loaded' && loadState !== 'complete') return
script.onload = script.onreadystatechange = null
resolve()
}
document.head.appendChild(script)
})
win.getCSS = (url,id = false) => new Promise((resolve, reject) => {
const link = document.createElement('link')
link.rel = 'stylesheet'
link.href = url
if (id) link.id = id
link.onerror = reject
link.onload = link.onreadystatechange = function() {
const loadState = this.readyState
if (loadState && loadState !== 'loaded' && loadState !== 'complete') return
link.onload = link.onreadystatechange = null
resolve()
}
document.head.appendChild(link)
})
win.activateDarkMode = function () {
document.documentElement.setAttribute('data-theme', 'dark')
if (document.querySelector('meta[name="theme-color"]') !== null) {
document.querySelector('meta[name="theme-color"]').setAttribute('content', '#0d0d0d')
}
}
win.activateLightMode = function () {
document.documentElement.setAttribute('data-theme', 'light')
if (document.querySelector('meta[name="theme-color"]') !== null) {
document.querySelector('meta[name="theme-color"]').setAttribute('content', '#ffffff')
}
}
const t = saveToLocal.get('theme')
const isDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches
const isLightMode = window.matchMedia('(prefers-color-scheme: light)').matches
const isNotSpecified = window.matchMedia('(prefers-color-scheme: no-preference)').matches
const hasNoSupport = !isDarkMode && !isLightMode && !isNotSpecified
if (t === undefined) {
if (isLightMode) activateLightMode()
else if (isDarkMode) activateDarkMode()
else if (isNotSpecified || hasNoSupport) {
const now = new Date()
const hour = now.getHours()
const isNight = hour <= 8 || hour >= 22
isNight ? activateDarkMode() : activateLightMode()
}
window.matchMedia('(prefers-color-scheme: dark)').addListener(function (e) {
if (saveToLocal.get('theme') === undefined) {
e.matches ? activateDarkMode() : activateLightMode()
}
})
} else if (t === 'light') activateLightMode()
else activateDarkMode()
const asideStatus = saveToLocal.get('aside-status')
if (asideStatus !== undefined) {
if (asideStatus === 'hide') {
document.documentElement.classList.add('hide-aside')
} else {
document.documentElement.classList.remove('hide-aside')
}
}
const detectApple = () => {
if(/iPad|iPhone|iPod|Macintosh/.test(navigator.userAgent)){
document.documentElement.classList.add('apple')
}
}
detectApple()
})(window)</script><script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script><script type="text/javascript" src ="/js/welcome.js" ></script><script src="/js/sweetalert.js"></script><link rel="stylesheet" href="/css/sweetalert.css"><!-- hexo injector head_end start --><link rel="stylesheet" href="https://npm.elemecdn.com/hexo-butterfly-swiper/lib/swiper.min.css" media="print" onload="this.media='all'"><link rel="stylesheet" href="https://npm.elemecdn.com/hexo-butterfly-swiper/lib/swiperstyle.css" media="print" onload="this.media='all'"><!-- hexo injector head_end end --><meta name="generator" content="Hexo 6.3.0"></head><body><div id="sidebar"><div id="menu-mask"></div><div id="sidebar-menus"><div class="avatar-img is-center"><img src="/img/avatar.jpg" onerror="onerror=null;src='/img/loading.gif'" alt="avatar"/></div><div class="sidebar-site-data site-data is-center"><a href="/archives/"><div class="headline">文章</div><div class="length-num">61</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">39</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">10</div></a></div><br/><div class="menus_items"><div class="menus_item"><a class="site-page" target="_blank" rel="noopener" href="https://gitee.com/JasonsGong/jasonsgong/pages"><i class="fa-fw fas fa-sync-alt"></i><span> 更新</span></a></div><div class="menus_item"><a class="site-page" target="_blank" rel="noopener" href="https://www.tutorialspoint.com/compile_java8_online.php"><i class="fa-fw fas fa-code"></i><span> 代码</span></a></div><div class="menus_item"><a class="site-page" href="/notice/"><i class="fa-fw fas fa-stream"></i><span> 公告</span></a></div><div class="menus_item"><a class="site-page" href="/website/"><i class="fa-fw fas fa-list"></i><span> 网址</span></a></div><div class="menus_item"><a class="site-page" href="/record/"><i class="fa-fw fas fa-bars"></i><span> 记录</span></a></div><div class="menus_item"><a class="site-page" target="_blank" rel="noopener" href="https://tongji.baidu.com/main/overview/10000573913/overview/index?siteId=20315864"><i class="fa-fw fas fa-chart-line"></i><span> 统计</span></a></div><div class="menus_item"><a class="site-page" target="_blank" rel="noopener" href="https://jasonsgong.github.io"><i class="fa-fw far fa-clone"></i><span> 镜像</span></a></div><div class="menus_item"><a class="site-page" href="/progress/"><i class="fa-fw far fa-paper-plane"></i><span> 进度</span></a></div><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i><span> 主页</span></a></div></div></div></div><div class="post" id="body-wrap"><header class="not-top-img" id="page-header"><nav id="nav"><span id="blog-info"><a href="/" title="The Blog"><img class="site-icon" src="/img/logo.png"/><span class="site-name">The Blog</span></a></span><div id="menus"><div id="search-button"><a class="site-page social-icon search" href="javascript:void(0);"><i class="fas fa-search fa-fw"></i><span> 搜索</span></a></div><div class="menus_items"><div class="menus_item"><a class="site-page" target="_blank" rel="noopener" href="https://gitee.com/JasonsGong/jasonsgong/pages"><i class="fa-fw fas fa-sync-alt"></i><span> 更新</span></a></div><div class="menus_item"><a class="site-page" target="_blank" rel="noopener" href="https://www.tutorialspoint.com/compile_java8_online.php"><i class="fa-fw fas fa-code"></i><span> 代码</span></a></div><div class="menus_item"><a class="site-page" href="/notice/"><i class="fa-fw fas fa-stream"></i><span> 公告</span></a></div><div class="menus_item"><a class="site-page" href="/website/"><i class="fa-fw fas fa-list"></i><span> 网址</span></a></div><div class="menus_item"><a class="site-page" href="/record/"><i class="fa-fw fas fa-bars"></i><span> 记录</span></a></div><div class="menus_item"><a class="site-page" target="_blank" rel="noopener" href="https://tongji.baidu.com/main/overview/10000573913/overview/index?siteId=20315864"><i class="fa-fw fas fa-chart-line"></i><span> 统计</span></a></div><div class="menus_item"><a class="site-page" target="_blank" rel="noopener" href="https://jasonsgong.github.io"><i class="fa-fw far fa-clone"></i><span> 镜像</span></a></div><div class="menus_item"><a class="site-page" href="/progress/"><i class="fa-fw far fa-paper-plane"></i><span> 进度</span></a></div><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i><span> 主页</span></a></div></div><div id="toggle-menu"><a class="site-page" href="javascript:void(0);"><i class="fas fa-bars fa-fw"></i></a></div></div></nav></header><main class="layout" id="content-inner"><div id="post"><div id="post-info"><h1 class="post-title">压力测试与性能监控</h1><div id="post-meta"><div class="meta-firstline"><span class="post-meta-date"><i class="far fa-calendar-alt fa-fw post-meta-icon"></i><span class="post-meta-label">发表于</span><time class="post-meta-date-created" datetime="2023-07-09T08:00:10.000Z" title="发表于 2023-07-09 16:00:10">2023-07-09</time><span class="post-meta-separator">|</span><i class="fas fa-history fa-fw post-meta-icon"></i><span class="post-meta-label">更新于</span><time class="post-meta-date-updated" datetime="2024-01-05T13:51:58.807Z" title="更新于 2024-01-05 21:51:58">2024-01-05</time></span><span class="post-meta-categories"><span class="post-meta-separator">|</span><i class="fas fa-inbox fa-fw post-meta-icon"></i><a class="post-meta-categories" href="/categories/%E6%B5%8B%E8%AF%95/">测试</a></span></div><div class="meta-secondline"><span class="post-meta-separator">|</span><span class="post-meta-wordcount"><i class="far fa-file-word fa-fw post-meta-icon"></i><span class="post-meta-label">字数总计:</span><span class="word-count">1.3k</span><span class="post-meta-separator">|</span><i class="far fa-clock fa-fw post-meta-icon"></i><span class="post-meta-label">阅读时长:</span><span>4分钟</span></span><span class="post-meta-separator">|</span><span class="post-meta-pv-cv" id="" data-flag-title="压力测试与性能监控"><i class="far fa-eye fa-fw post-meta-icon"></i><span class="post-meta-label">阅读量:</span><span id="busuanzi_value_page_pv"><i class="fa-solid fa-spinner fa-spin"></i></span></span></div></div></div><article class="post-content" id="article-container"><h2 id="一-压力测试"><a href="#一-压力测试" class="headerlink" title="一.压力测试"></a>一.压力测试</h2><p><strong>性能指标</strong></p>
<ul>
<li><p>响应时间Response Time: RT响应时间指用户从客户端发起一个请求开始到客户端接收到从服务器端返回的响应结束整个过程所耗费的时间。</p>
</li>
<li><p>HPSHits Per Second :每秒点击次数,单位是次&#x2F;秒。</p>
</li>
<li><p>TPSTransaction per Second系统每秒处理交易数单位是笔&#x2F;秒。</p>
</li>
<li><p>QPSQuery per Second系统每秒处理查询次数单位是次&#x2F;秒。对于互联网业务中,如果某些业务有且仅有一个请求连接,那么 TPS&#x3D;QPS&#x3D;HPS一般情况下用 TPS 来衡量整个业务流程,用 QPS 来衡量接口查询次数,用 HPS 来表示对服务器单击请求。</p>
</li>
<li><p>无论 TPS、QPS、HPS,此指标是衡量系统处理能力非常重要的指标,越大越好,根据经验,一般情况下:</p>
<p>金融行业1000TPS~50000TPS不包括互联网化的活动</p>
<p>保险行业100TPS~100000TPS不包括互联网化的活动</p>
<p>制造行业10TPS~5000TPS</p>
<p>互联网电子商务10000TPS~1000000TPS</p>
<p>互联网中型网站1000TPS~50000TPS</p>
<p>互联网小型网站500TPS~10000TPS</p>
</li>
<li><p>最大响应时间Max Response Time 指用户发出请求或者指令到系统做出反应(响应)的最大时间。</p>
</li>
<li><p>最少响应时间Mininum ResponseTime 指用户发出请求或者指令到系统做出反应(响应)的最少时间。</p>
</li>
<li><p>90%响应时间90% Response Time 是指所有用户的响应时间进行排序,第 90%的响应时间。</p>
</li>
<li><p>从外部看,性能测试主要关注如下三个指标</p>
<p>吞吐量:每秒钟系统能够处理的请求数、任务数。</p>
<p>响应时间:服务处理一个请求或一个任务的耗时。</p>
<p>错误率:一批请求中结果出错的请求所占比例。</p>
</li>
</ul>
<h3 id="1-JMeter的使用"><a href="#1-JMeter的使用" class="headerlink" title="1.JMeter的使用"></a>1.JMeter的使用</h3><h4 id="1-1-安装"><a href="#1-1-安装" class="headerlink" title="1.1 安装"></a>1.1 安装</h4><p><strong>1.下载安装包</strong></p>
<p>安装网址: <a target="_blank" rel="noopener" href="https://jmeter.apache.org/download_jmeter.cgi">https://jmeter.apache.org/download_jmeter.cgi</a></p>
<p><img src="/pictures/image-20230709161151542.png" alt="image-20230709161151542"></p>
<p><strong>2.解压并双击运行</strong></p>
<p><img src="/pictures/image-20230709161346717.png" alt="image-20230709161346717"></p>
<p><img src="/pictures/image-20230709161600398.png" alt="image-20230709161600398"></p>
<h4 id="1-2-设置"><a href="#1-2-设置" class="headerlink" title="1.2 设置"></a>1.2 设置</h4><p>设置为中文页面</p>
<p>点击Options-&gt;Language-&gt;选择简体中文</p>
<p><img src="/pictures/image-20230709161752103.png" alt="image-20230709161752103"></p>
<p>永久设置成中文-&gt;<code>bin\jmeter.properties</code>配置文件中添加如下配置</p>
<p><img src="/pictures/image-20240105214825445.png" alt="image-20240105214825445"></p>
<p>jmeter发送请求响应的数据乱码的问题-&gt;<code>bin\jmeter.properties</code>配置文件中添加如下配置</p>
<p><img src="/pictures/image-20240105215115275.png" alt="image-20240105215115275"></p>
<h4 id="1-3-压测示例"><a href="#1-3-压测示例" class="headerlink" title="1.3 压测示例"></a>1.3 压测示例</h4><p><strong>1.新建线程组</strong></p>
<p>右键点击测试计划-&gt;添加-&gt;线程-&gt;线程组</p>
<p><img src="/pictures/image-20230709162502383.png" alt="image-20230709162502383"></p>
<p>线程组参数详解:</p>
<ul>
<li><p>线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数。</p>
</li>
<li><p>线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数。</p>
</li>
<li><p>Ramp-Up Period(in seconds)准备时长:设置的虚拟用户数需要多长时间全部启动。如果线程数为 10准备时长为 2那么需要 2 秒钟启动10个线程也就是每秒钟启动 5 个线程。</p>
</li>
<li><p>循环次数:每个线程发送请求的次数。如果线程数为 10循环次数为 100那么每个线程发送 100 次请求。总请求数为 10*100&#x3D;1000 。如勾选了“永远”,那么所有线程会一直发送请求,一到选择停止运行脚本。</p>
</li>
<li><p>Delay Thread creation until needed直到需要时延迟线程的创建。</p>
</li>
<li><p>调度器:设置线程组启动的开始时间和结束时间(配置调度器时,需要勾选循环次数为永远)</p>
</li>
<li><p>持续时间(秒):测试持续时间,会覆盖结束时间</p>
</li>
<li><p>启动延迟(秒):测试延迟启动时间,会覆盖启动时间</p>
</li>
<li><p>启动时间:测试启动时间,启动延迟会覆盖它。当启动时间已过,手动只需测试时当前时间也会覆盖它。</p>
</li>
<li><p>结束时间:测试结束时间,持续时间会覆盖它。</p>
</li>
</ul>
<p><strong>2.添加HTTP请求</strong></p>
<p><img src="/pictures/image-20230709163303477.png" alt="image-20230709163303477"></p>
<p><img src="/pictures/image-20230709163457833.png" alt="image-20230709163457833"></p>
<p><strong>3.添加监听器</strong></p>
<p><img src="/pictures/image-20230709163639856.png" alt="image-20230709163639856"></p>
<p><strong>4.启动压测和查看分析结果</strong></p>
<p><img src="/pictures/image-20230709164012746.png" alt="image-20230709164012746"></p>
<p><img src="/pictures/image-20230709164208747.png" alt="image-20230709164208747"></p>
<h4 id="1-4-JMeter-Address-Already-in-use-错误解决"><a href="#1-4-JMeter-Address-Already-in-use-错误解决" class="headerlink" title="1.4 JMeter Address Already in use 错误解决"></a>1.4 JMeter Address Already in use 错误解决</h4><p>windows 本身提供的端口访问机制的问题。<br>Windows 提供给 TCP&#x2F;IP 链接的端口为 1024-5000并且要四分钟来循环回收他们。就导致<br>我们在短时间内跑大量的请求时将端口占满了。<br>1.cmd 中,用 regedit 命令打开注册表</p>
<p>2.在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 下,<br>右击 parameters添加一个新的 DWORD名字为 MaxUserPort然后双击 MaxUserPort输入数值数据为 65534基数选择十进制如果是分布式运行的话控制机器和负载机器都需要这样操作</p>
<p>3.修改配置完毕之后记得重启机器才会生效<br>官网解释:<a target="_blank" rel="noopener" href="https://support.microsoft.com/zh-cn/help/196271/when-you-try-to-connect-from-tcp-ports-greater-than-5000-you-receive-t">https://support.microsoft.com/zh-cn/help/196271/when-you-try-to-connect-from-tcp-ports-greater-than-5000-you-receive-t</a><br>TCPTimedWaitDelay30</p>
<h2 id="二-性能监控"><a href="#二-性能监控" class="headerlink" title="二.性能监控"></a>二.性能监控</h2><p>Jdk 的两个小工具 jconsole、jvisualvm升级版的 jconsole;通过命令行启动,可监控本地和远程应用。</p>
<h3 id="1-jconsole"><a href="#1-jconsole" class="headerlink" title="1.jconsole"></a>1.jconsole</h3><p><img src="/pictures/image-20230709160343565.png" alt="image-20230709160343565"></p>
<h3 id="2-jvisualvm"><a href="#2-jvisualvm" class="headerlink" title="2.jvisualvm"></a><strong>2.jvisualvm</strong></h3><p><strong>jvisualvm相比jconsole功能更全一般使用jvisualvm</strong></p>
<p><img src="/pictures/image-20230709160552461.png" alt="image-20230709160552461"></p>
<p><strong>Visual GC插件的安装</strong></p>
<p>点击工具-&gt;插件-&gt;在可用插件中选择Visual GC安装</p>
<p>安装成功之后显示如下</p>
<p><img src="/pictures/image-20230709160932416.png" alt="image-20230709160932416"></p>
<p><img src="/pictures/image-20230709170626946.png" alt="image-20230709170626946"></p>
</article><div class="tag_share"><div class="post-meta__tag-list"><a class="post-meta__tags" href="/tags/%E6%B5%8B%E8%AF%95/">测试</a></div><div class="post_share"><div class="social-share" data-image="/img/1.png" data-sites="wechat,weibo,qq"></div><link rel="stylesheet" href="/cdn/css/share.min.css" media="print" onload="this.media='all'"><script src="/cdn/js/social-share.min.js" defer></script></div></div><div class="post-reward"><div class="reward-button"><i class="fas fa-qrcode"></i> 打赏</div><div class="reward-main"><ul class="reward-all"><li class="reward-item"><a href="/img/wechat.jpg" target="_blank"><img class="post-qr-code-img" src="/img/wechat.jpg" alt="微信"/></a><div class="post-qr-code-desc">微信</div></li><li class="reward-item"><a href="/img/alipay.jpg" target="_blank"><img class="post-qr-code-img" src="/img/alipay.jpg" alt="支付宝"/></a><div class="post-qr-code-desc">支付宝</div></li></ul></div></div><br/><div id="post-comment"><div class="comment-head"><div class="comment-headline"><i class="far fa-comment-alt fa-fw"></i><span> 评论</span></div></div><div class="comment-wrap"><div><div id="gitalk-container"></div></div></div></div></div><div class="aside-content" id="aside-content"><div class="card-widget card-info"><div class="is-center"><div class="avatar-img"><img src="/img/avatar.jpg" onerror="this.onerror=null;this.src='/img/loading.gif'" alt="avatar"/></div><div class="author-info__name">Jason</div><div class="author-info__description">Debug the World</div></div><div class="card-info-data site-data is-center"><a href="/archives/"><div class="headline">文章</div><div class="length-num">61</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">39</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">10</div></a></div><a id="card-info-btn"><i class="fab fa-microsoft"></i><span>Ctrl + D 收藏</span></a><div class="card-info-social-icons is-center"><a class="social-icon" href="https://github.com/JasonsGong" target="_blank" title="Github"><i class="fab fa-github"></i></a><a class="social-icon" href="tencent://AddContact/?fromId=45&amp;fromSubId=1&amp;subcmd=all&amp;uin=2602183349&amp;website=www.oicqzone.com" target="_blank" title="QQ"><i class="fab fa-qq"></i></a><a class="social-icon" href="mailto:2602183349@qq.com" target="_blank" title="Email"><i class="fas fa-envelope-open-text"></i></a><a class="social-icon" href="https://github.com/JasonsGong?tab=repositories" target="_blank" title="代码仓库"><i class="fas fa-database"></i></a></div></div><div class="card-widget card-announcement"><div class="item-headline"><i class="fas fa-bullhorn fa-shake"></i><span>公告</span></div><div class="announcement_content">本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站</div></div><div class="sticky_layout"><div class="card-widget" id="card-toc"><div class="item-headline"><i class="fas fa-stream"></i><span>目录</span><span class="toc-percentage"></span></div><div class="toc-content is-expand"><ol class="toc"><li class="toc-item toc-level-2"><a class="toc-link" href="#%E4%B8%80-%E5%8E%8B%E5%8A%9B%E6%B5%8B%E8%AF%95"><span class="toc-text">一.压力测试</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#1-JMeter%E7%9A%84%E4%BD%BF%E7%94%A8"><span class="toc-text">1.JMeter的使用</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#1-1-%E5%AE%89%E8%A3%85"><span class="toc-text">1.1 安装</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#1-2-%E8%AE%BE%E7%BD%AE"><span class="toc-text">1.2 设置</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#1-3-%E5%8E%8B%E6%B5%8B%E7%A4%BA%E4%BE%8B"><span class="toc-text">1.3 压测示例</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#1-4-JMeter-Address-Already-in-use-%E9%94%99%E8%AF%AF%E8%A7%A3%E5%86%B3"><span class="toc-text">1.4 JMeter Address Already in use 错误解决</span></a></li></ol></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E4%BA%8C-%E6%80%A7%E8%83%BD%E7%9B%91%E6%8E%A7"><span class="toc-text">二.性能监控</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#1-jconsole"><span class="toc-text">1.jconsole</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#2-jvisualvm"><span class="toc-text">2.jvisualvm</span></a></li></ol></li></ol></div></div><div class="card-widget card-recent-post"><div class="item-headline"><i class="fas fa-history"></i><span>最近更新</span></div><div class="aside-list"><div class="aside-list-item"><a class="thumbnail" href="/posts/14438.html" title="常见问题和细节知识"><img src="/img/9.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="常见问题和细节知识"/></a><div class="content"><a class="title" href="/posts/14438.html" title="常见问题和细节知识">常见问题和细节知识</a><time datetime="2024-04-02T02:54:28.390Z" title="更新于 2024-04-02 10:54:28">2024-04-02</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/posts/18459.html" title="Git命令速查"><img src="/img/9.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Git命令速查"/></a><div class="content"><a class="title" href="/posts/18459.html" title="Git命令速查">Git命令速查</a><time datetime="2024-04-02T02:53:33.764Z" title="更新于 2024-04-02 10:53:33">2024-04-02</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/posts/63724.html" title="IDEA常用快捷键"><img src="/img/5.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="IDEA常用快捷键"/></a><div class="content"><a class="title" href="/posts/63724.html" title="IDEA常用快捷键">IDEA常用快捷键</a><time datetime="2024-04-02T02:53:27.285Z" title="更新于 2024-04-02 10:53:27">2024-04-02</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/posts/40445.html" title="数据结构与算法"><img src="/img/10.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="数据结构与算法"/></a><div class="content"><a class="title" href="/posts/40445.html" title="数据结构与算法">数据结构与算法</a><time datetime="2024-04-02T02:52:59.937Z" title="更新于 2024-04-02 10:52:59">2024-04-02</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/posts/26768.html" title="Maven配置文件settings.xml"><img src="/img/8.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Maven配置文件settings.xml"/></a><div class="content"><a class="title" href="/posts/26768.html" title="Maven配置文件settings.xml">Maven配置文件settings.xml</a><time datetime="2024-04-02T02:44:49.897Z" title="更新于 2024-04-02 10:44:49">2024-04-02</time></div></div></div></div></div></div></main><footer id="footer"><div id="footer-wrap"></div></footer></div><div id="rightside"><div id="rightside-config-hide"><button id="readmode" type="button" title="阅读模式"><i class="fas fa-book-open"></i></button><button id="darkmode" type="button" title="浅色和深色模式转换"><i class="fas fa-adjust"></i></button><button id="hide-aside-btn" type="button" title="单栏和双栏切换"><i class="fas fa-arrows-alt-h"></i></button></div><div id="rightside-config-show"><button id="rightside_config" type="button" title="设置"><i class="fas fa-cog fa-spin"></i></button><button class="close" id="mobile-toc-button" type="button" title="目录"><i class="fas fa-list-ul"></i></button><a id="to_comment" href="#post-comment" title="直达评论"><i class="fas fa-comment-alt"></i></a><button id="go-up" type="button" title="回到顶部"><span class="scroll-percent"></span><i class="fas fa-arrow-up"></i></button></div></div><div><script src="/js/utils.js"></script><script src="/js/main.js"></script><script src="/cdn/js/medium-zoom.min.js"></script><script src="/cdn/js/instantpage.min.js" type="module"></script><script src="/cdn/js/snackbar.min.js"></script><div class="js-pjax"><script>function loadGitalk () {
function initGitalk () {
var gitalk = new Gitalk(Object.assign({
clientID: '00fb27b1e484536359c2',
clientSecret: 'be41a12281c68b6e228d1a27e8d08aeb91541145',
repo: 'BlogComment',
owner: 'JasonsGong',
admin: ['JasonsGong'],
id: '9a759065a2a89c085255a99c409f9d6f',
updateCountCallback: commentCount
},null))
gitalk.render('gitalk-container')
}
if (typeof Gitalk === 'function') initGitalk()
else {
getCSS('/cdn/css/gitalk.min.css')
getScript('/cdn/js/gitalk.min.js').then(initGitalk)
}
}
function commentCount(n){
let isCommentCount = document.querySelector('#post-meta .gitalk-comment-count')
if (isCommentCount) {
isCommentCount.textContent= n
}
}
if ('Gitalk' === 'Gitalk' || !true) {
if (true) btf.loadComment(document.getElementById('gitalk-container'), loadGitalk)
else loadGitalk()
} else {
function loadOtherComment () {
loadGitalk()
}
}</script></div><script async data-pjax src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script><div id="local-search"><div class="search-dialog"><nav class="search-nav"><span class="search-dialog-title">搜索</span><span id="loading-status"></span><button class="search-close-button"><i class="fas fa-times"></i></button></nav><div class="is-center" id="loading-database"><i class="fas fa-spinner fa-pulse"></i><span> 数据库加载中</span></div><div class="search-wrap"><div id="local-search-input"><div class="local-search-box"><input class="local-search-box--input" placeholder="搜索文章" type="text"/></div></div><br/><div class="no-result" id="local-search-results"></div><div id="local-search-stats-wrap"></div></div></div><div id="search-mask"></div><script src="/js/search/local-search.js"></script></div></div><!-- hexo injector body_end start --><script data-pjax>
function butterfly_swiper_injector_config(){
var parent_div_git = document.getElementById('recent-posts');
var item_html = '<div class="recent-post-item" style="height: auto;width: 100%"><div class="blog-slider swiper-container-fade swiper-container-horizontal" id="swiper_container"><div class="blog-slider__wrp swiper-wrapper" style="transition-duration: 0ms;"><div class="blog-slider__item swiper-slide" style="width: 750px; opacity: 1; transform: translate3d(0px, 0px, 0px); transition-duration: 0ms;"><a class="blog-slider__img" href="posts/19306.html" alt=""><img width="48" height="48" src="/img/1.png" alt="" onerror="this.src=https://unpkg.zhimg.com/akilar-candyassets/image/loading.gif; this.onerror = null;"/></a><div class="blog-slider__content"><span class="blog-slider__code">2023-04-21</span><a class="blog-slider__title" href="posts/19306.html" alt="">Docker容器化技术</a><div class="blog-slider__text">Docker</div><a class="blog-slider__button" href="posts/19306.html" alt="">详情 </a></div></div><div class="blog-slider__item swiper-slide" style="width: 750px; opacity: 1; transform: translate3d(0px, 0px, 0px); transition-duration: 0ms;"><a class="blog-slider__img" href="posts/47003.html" alt=""><img width="48" height="48" src="/img/4.png" alt="" onerror="this.src=https://unpkg.zhimg.com/akilar-candyassets/image/loading.gif; this.onerror = null;"/></a><div class="blog-slider__content"><span class="blog-slider__code">2023-03-10</span><a class="blog-slider__title" href="posts/47003.html" alt="">常用正则表达式大全</a><div class="blog-slider__text">正则表达式</div><a class="blog-slider__button" href="posts/47003.html" alt="">详情 </a></div></div><div class="blog-slider__item swiper-slide" style="width: 750px; opacity: 1; transform: translate3d(0px, 0px, 0px); transition-duration: 0ms;"><a class="blog-slider__img" href="posts/20683.html" alt=""><img width="48" height="48" src="/img/9.png" alt="" onerror="this.src=https://unpkg.zhimg.com/akilar-candyassets/image/loading.gif; this.onerror = null;"/></a><div class="blog-slider__content"><span class="blog-slider__code">2023-06-05</span><a class="blog-slider__title" href="posts/20683.html" alt="">Linux中开发环境的搭建</a><div class="blog-slider__text">环境搭建</div><a class="blog-slider__button" href="posts/20683.html" alt="">详情 </a></div></div><div class="blog-slider__item swiper-slide" style="width: 750px; opacity: 1; transform: translate3d(0px, 0px, 0px); transition-duration: 0ms;"><a class="blog-slider__img" href="posts/63333.html" alt=""><img width="48" height="48" src="/img/6.png" alt="" onerror="this.src=https://unpkg.zhimg.com/akilar-candyassets/image/loading.gif; this.onerror = null;"/></a><div class="blog-slider__content"><span class="blog-slider__code">2023-06-03</span><a class="blog-slider__title" href="posts/63333.html" alt="">开发环境的搭建</a><div class="blog-slider__text">环境搭建</div><a class="blog-slider__button" href="posts/63333.html" alt="">详情 </a></div></div></div><div class="blog-slider__pagination swiper-pagination-clickable swiper-pagination-bullets"></div></div></div>';
if (parent_div_git !== null && typeof parent_div_git !== 'undefined') {
parent_div_git.insertAdjacentHTML("afterbegin",item_html)
}
}
var elist = 'undefined'.split(',');
var cpage = location.pathname;
var epage = 'all';
var flag = 0;
for (var i=0;i<elist.length;i++){
if (cpage.includes(elist[i])){
flag++;
}
}
if ((epage ==='all')&&(flag == 0)){
butterfly_swiper_injector_config();
}
else if (epage === cpage){
butterfly_swiper_injector_config();
}
</script><script defer src="https://npm.elemecdn.com/hexo-butterfly-swiper/lib/swiper.min.js"></script><script defer data-pjax src="https://npm.elemecdn.com/hexo-butterfly-swiper/lib/swiper_init.js"></script><!-- hexo injector body_end end --></body></html>