wrk 压测中请求无法响应问题解决过程
================= 遇到问题 =================
$ 直连压测
wrk -c10000 -t100 -d100m http://localhost:9981/order/list
$ nginx代理压测
wrk -c10000 -t100 -d100m http://localhost:8864/order/list
压测外的请求无法响应
================= 搜素方案 =================
$ 修改linux参数配置(最大打开文件数与进程最多打开文件数)以支持大量连接
$ nginx压测时会产生大量time_wait,与后端通信时开启keep alive以缓解time_wait情况
================= 用到的工具 =================
// 查看linux tcp连接情况
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}';
// 更快查看linux tcp连接情况的方式
ss -ant | awk 'NR>1 {++s[$1]} END {for(k in s) print k,s[k]}';
// 每秒输出一次当前系统连接状态
ss.sh
#!/bin/bash
while :
do
ss -ant | awk 'NR>1 {++s[$1]} END {for(k in s) print k,s[k]}'
sleep 1s;
done
================= 最终解决 =================
$ 修改linux参数配置

modprobe ip_conntrack vi /etc/sysctl.conf
fs.file-max = 1024000
net.netfilter.nf_conntrack_max = 1024000
net.nf_conntrack_max = 1024000
/sbin/sysctl -p vi /etc/security/limits.conf
* hard nofile 1024000
* soft nofile 1024000 try
net.netfilter.nf_conntrack_max = 1024000
net.nf_conntrack_max = 1024000
instead
net.ipv4.ip_conntrack_max = 1024000
net.ipv4.netfilter.ip_conntrack_max = 1024000
$ 修改nginx配置
/etc/nginx/nginx.conf
user nginx;
worker_processes 4; error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid; events {
worker_connections 10240;
} http {
include /etc/nginx/mime.types;
default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on;
#tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf;
} /etc/nginx/conf.d/default.conf
upstream http_backend {
server 127.0.0.1:9981;
keepalive 512;
} server {
listen 8864;
server_name localhost; location /nginx {
default_type application/json;
return 200 '{"success": true}';
} location / {
proxy_pass http://http_backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
} #error_page 404 /404.html; # redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
} nginx -s reload
$ 再次压测,直连和nginx代理都能正常响应(虽然很慢...应该与硬件条件有关)
参考文章:
构建C1000K的服务器(2) – 实现百万连接的comet服务器
sysctl: cannot stat /proc/sys/net/ipv4/netfilter/ip_conntrack_max: No such file or directory
wrk 压测中请求无法响应问题解决过程的更多相关文章
- 性能压测中的SLA,你知道吗?
本文是<Performance Test Together>(简称PTT)系列专题分享的第6期,该专题将从性能压测的设计.实现.执行.监控.问题定位和分析.应用场景等多个纬度对性能压测的全 ...
- 性能测试:压测中TPS上不去的几种原因分析(就是思路要说清楚)
转https://www.cnblogs.com/imyalost/p/8309468.html 先来解释下什么叫TPS: TPS(Transaction Per Second):每秒事务数,指服务器 ...
- JMeter压测Rest请求
下载及安装 官网下载JMeter3.0: 找到bin目录下的jmeter.bat启动: 压测Rest请求 1.添加线程组 路径:右键“测试计划”->添加“Threads(Users)”-> ...
- wrk压测工具使用
介绍分为四部分 1.wrk简述 2.wrk安装 3.wrk运行参数 4.wrk高级用法 1.wrk简述 当使用ab做压测的时候发现,ab的客户端消耗很大,而且测试时性能较差,测试redis,sprin ...
- https大势已来?看腾讯专家如何在高并发压测中支持https
WeTest 导读 用epoll编写一个高并发网络程序是很常见的任务,但在epoll中加入ssl层的支持则是一个不常见的场景.腾讯WeTest服务器压力测产品,在用户反馈中收到了不少支持https协议 ...
- 压测中的QPS与TPS区别
原文来自:https://www.cnblogs.com/fkkk/p/11957566.html QPS(每秒查询率)=并发数/平均响应时间 TPS(每秒处理事务数)=请求数/时间(秒) TPS的过 ...
- Node+Express中请求和响应对象
在用 Express 构建 Web 服务器时,大部分工作都是从请求对象开始,到响应对象终止. url的组成: 协议协议确定如何传输请求.我们主要是处理 http 和 https.其他常见的协议还有 f ...
- 一次压测中tomcat生成session释放不及时导致的频繁fullgc性能优化案例
性能问题:老年代一直处于占满状态,为什么没有发生内存溢出 以HotSpot VM的分代式GC为例,普通对象分配都是在young gen进行的,具体是从在位于young gen中的eden space中 ...
- django从请求到响应的过程深入讲解
django启动 我们在启动一个django项目的时候,无论你是在命令行执行还是在pycharm直接点击运行,其实都是执行'runserver'的操作,而ruserver是使用django自带的的we ...
随机推荐
- 主席树 || 可持久化线段树 || BZOJ 3653: 谈笑风生 || Luogu P3899 [湖南集训]谈笑风生
题面:P3899 [湖南集训]谈笑风生 题解: 我很喜欢这道题. 因为A是给定的,所以实质是求二元组的个数.我们以A(即给定的P)作为基点寻找答案,那么情况分两类.一种是B为A的父亲,另一种是A为B的 ...
- Gym 101981G - Pyramid - [打表找规律][2018-2019 ACM-ICPC Asia Nanjing Regional Contest Problem G]
题目链接:http://codeforces.com/gym/101981/attachments The use of the triangle in the New Age practices s ...
- Python_tkinter(1)_窗口创建与布局
环境:Python 3.7.2 1. 窗口基本创建(窗口标题.窗口大小) import tkinter from tkinter import * # 初始化Tk() root = Tk() # 设置 ...
- SimplifyReader项目(转载)
项目地址: https://github.com/SkillCollege/SimplifyReader SkillCollege / SimplifyReader 一款基于Google Materi ...
- jenkins使用笔记
jenkins动态在构建的时候给脚本传递参数 1.任务 >General > 参数化构建过程 >选项参数 2.把变量传递给shell脚本 3.构建的时候给参数赋值 4.shell脚 ...
- 018-并发编程-java.util.concurrent.locks之-ReentrantReadWriteLock可重入读写锁
一.概述 ReentrantLock是一个排他锁,同一时间只允许一个线程访问,而ReentrantReadWriteLock允许多个读线程同时访问,但不允许写线程和读线程.写线程和写线程同时访问.相对 ...
- 016-并发编程-java.util.concurrent.locks之-Lock及ReentrantLock
一.概述 重入锁ReentrantLock,就是支持重进入的锁 ,它表示该锁能够支持一个线程对资源的重复加锁.支持公平性与非公平性选择,默认为非公平. 以下梳理ReentrantLock.作为依赖于A ...
- Unity3D加密保护解决方案
精锐5加密锁支持Unity3D代码及资源保护,并提供授权方案 产品简介 可使用Virbox Protector加壳工具对Unity3D代码进行加密.Unity3D使用开源mono C#语法,代码会编译 ...
- Docker:镜像构建与进入容器总结
构建镜像总结 docker构建镜像有两种方法: 1.使用docker commit + 容器 docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] ...
- 21 python的魔法方法(转)
魔法方法 含义 基本的魔法方法 __new__(cls[, ...]) 1. __new__ 是在一个对象实例化的时候所调用的第一个方法2. 它的第一个参数是这个类,其他的参数是用来直接传递给 _ ...