IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 一次压测过程:HTTP tw状态、jvm锯齿 -> 正文阅读

[网络协议]一次压测过程:HTTP tw状态、jvm锯齿

TCP连接异常,timewait状态过多

问题描述

服务链路:nginx -> sprintboot(vertx + httpclient) -> 后端长连接
问题:服务Time wait状态过多;随着不断增加请求,tw状态也线性?增长
在这里插入图片描述

netstat -n

查看网络连接状态:netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’在这里插入图片描述
netstat -n结合grep查看服务器端口使用状态,发现nginx服务器状态正常,无大量tw或cw状态;sprintboot服务器大量tw状态;
已知
nginx 开启了http1.1,
sprintboot代码如下,开启了keep-alive;

ThreadPoolExecutor tp = new ThreadPoolExecutor(200, 200, 300, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(200));

VertxOptions vertxOptions = new VertxOptions();
HttpServerOptions options = new HttpServerOptions().setLogActivity(true);
options.setIdleTimeout(20);
options.setIdleTimeoutUnit(TimeUnit.SECONDS);
options.setTcpKeepAlive(true);

HttpServer server = vertx.createHttpServer(options);
server.requestHandler(new HttpHandler(tp));
server.listen(port, res -> { });

通过打印请求头发现传到sprintboot的请求头如下(部分):

[HTTP]HTTP_1_1
Content-Type: application/json
Connection: close
Content-Length: 21
User-Agent: Apache-HttpClient/4.5.13 (Java/1.8.0_181)
Accept-Encoding: gzip,deflate

应该是从客户端发出的请求带Connection: close;

TCP 状态及含义

https://new.qq.com/omn/20200618/20200618A0D67200.html
在这里插入图片描述
TW是主动端的状态

解决方法

Nginx配置:proxy_set_header Connection “”;
修改nginx到server为长连接

JVM锯齿

问题描述 unreachable objects较多

程序消耗Eden区呈现锯齿状,堆使用逐渐增大到-xmx大小,然后通过一次gc下降到使用比较小的情况;
在这里插入图片描述
通过dump发现unreacheable objects对象比较多
在这里插入图片描述
主要对象是HeapCharBuffer
在这里插入图片描述
网上找了一些资料:

  • Java NIO中的缓冲区Buffer(二)创建/复制缓冲区:https://www.cnblogs.com/chenpi/archive/2017/02/28/6478624.html
    主要有以下两种方式创建缓冲区:
    1、调用allocate方法
    2、调用wrap方法
    返回的都是new HeapCharBuffer()对象;
  • 源码阅读:https://gitee.com/joejay/LearningJDK/blob/master/src/java/nio/HeapCharBuffer.java
  • 6个重要的JVM性能参数:https://zhuanlan.zhihu.com/p/122261143 (暂时没找到别的文章说这个锯齿)
    在这里插入图片描述

总结

从网上资料看,jvm正常运行来说是就是锯齿状的(?存疑)
因为看dump文件里char[]包含了比较多东西,http请求报文,/metric,Prometheus的监控,还有很多乱码,以及压测没发现其他的问题,打到xmx就触发gc可以恢复。所以就不去细纠这个到底是jvm就这样,还是三方包使用的问题了。。

协议概览

这一part主要是因为本来想用wireshark分析下我本地发出请求状态及计算下tps啥的。。
后来发现获取了很多之前没见过的协议类型,找了几个比较有意思的记一下。
对协议类型总结比较全的可以参考:科来网络通讯协议图 http://www.colasoft.com.cn/download/protocols_map.php

SSDP 简单服务发现协议

应用层
SSDP(Simple Service Discovery Protocol),简单服务发现协议,用于发现局域网里面的设备和服务;239.255.255.250是默认SSDP广播ip地址;SSDP消息分为设备查询消息、设备通知消息两种;
M-SEARCH * HTTP/1.1
HOST: 239.255.255.250:1900
MAN: “ssdp:discover”
MX: 5
ST: ssdp:all
在这里插入图片描述

ARP 地址解析协议

地址解析协议, 用于实现从 IP 地址到 MAC 地址的映射,即询问目标IP对应的MAC地址。
ARP(地址解析协议) :根据IP地址获取物理地址的一个TCP/IP协议。
RARP(反向地址转换协议):允许局域网的物理机器从网关服务器的 ARP 表或者缓存上请求自己的 IP 地址。
在这里插入图片描述

BROSWSER

SMS协议:局域网文件设备操作协议
https://blog.csdn.net/qq_33336155/article/details/53307308
摘抄:
SMB(ServerMessage Block)通信协议是微软(Microsoft)和英特尔(Intel)在1987年制定的协议,主要是作为Microsoft网络的通讯协议。SMB 是在会话层(session layer)和表示层(presentation layer)以及小部分应用层(application layer)的协议。SMB使用了NetBIOS的应用程序接口 (Application Program Interface,简称API),一般端口使用为139,445。另外,它是一个开放性的协议,允许了协议扩展——使得它变得更大而且复杂;大约有65个最上层的作业,而每个作业都超过120个函数,甚至Windows NT也没有全部支持到,最近微软又把 SMB 改名为 CIFS(CommonInternet File System),并且加入了许多新的特色。
SMB/CIFS–NetBOIS/Browser/NBNS 协议
https://blog.csdn.net/woswod/article/details/63253500
摘抄:
浏览在SMB协议中,计算机为了访问网络资源,就需要了解网络上存在的资源列表(例如在Windows下使用网络邻居查看可以访问的计算机),这个机制 就被称为浏览(Browsing)
工作组和域都可以跨越多个子网,因此网络中就存在两种Browser,一种为Domain Master Browser,用于维护整个工作组或域内的浏览数据,另一种为Local Master Browser,用于维护本子网内的浏览数据,它和Domain Master Browser通信以获得所有的可浏览数据。划分这两种Browser主要是由于浏览数据依赖于本地网广播来获得资源列表,不同子网之间只能通过浏览器之 间的交流能力,才能互相交换资源列表。   
  但是,为了浏览多个子网的资源,必须使用NBNS名字服务器的解析方式,没有NBNS 的帮助,计算机将不能获得子网外计算机的NetBIOS名字。Local Master Browser也需要查询NetBIOS名字服务器以获得Domain Master Browser的名字,以相互交换网络资源信息。 
  在这里插入图片描述

NBNS 网络基本输入/输出系统 (NetBIOS) 名称服务器 (NBNS) 协议

https://zhuanlan.zhihu.com/p/115607631
网络基本输入/输出系统 (NetBIOS) 名称服务器 (NBNS) 协议是 TCP/IP 上的 NetBIOS (NetBT) 协议族的一部分,它在基于 NetBIOS 名称访问的网络上提供主机名和地址映射方法
NBNS是网络基本输入/输出系统 (NetBIOS) 名称服务器的缩写。它也是TCP/IP协议的一部分。它负责将计算机名转化为对应的IP。其中,Name query NB是请求包,Name query response NB是响应包。双方的端口号均为137。NBNS在WIndows用的较少,Windows普遍采用LLMNR协议。

LLMNR 链路本地多播名称解析

当DNS名称服务器请求失败时,Microsoft Windows系统就会通过链路本地多播名称解析(LLMNR)和Net-BIOS名称服务(NBT-NS)试图在本地进行名称解析。
LLMNR为使用IPv4、IPv6或者同时使用这两种地址的设备提供了点对点名称解析服务,可以让同一子网中的IPv4和IPv6设备不需要WINS或DNS服务器就可以解析对方的名称,而这个功能是WINS和DNS都无法完全提供的。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-17 15:45:03  更:2021-08-17 15:45:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 19:03:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码