记:排查设备web时慢时快问题,速度提升100%

news2024/12/14 17:49:11

问题描述

问题1:

发现web登录界面刷新和登录功能都比较卡,开浏览器控制台看了下,让我很惊讶,居然能这么慢:

公司2个局域网内的表现不同,局域网A中的都比较卡,局域网B中的又不存在该现象。

问题2:

同事使用QT开发的UI控制起来也比较慢。控制UI的时候,UI资源加载前需要与API接口通讯。

当QT比较慢的时候web访问和操作也必然会慢,甚至有时候打不开。

问题3:

以前是不存在这个问题的,也是近半年出现的网络访问web较慢的问题。也排除会不会是新代码新功能引起的。

下定决心一定要把这个问题找到,如果找不到的话,后面可能会带来更大的影响。

前期分析

因为设备内的网页比较简单,所以使用了一个简易的http库开发的webserver,设备使用的是httplib.h库开发的。

原本以为是httplib.h库并发不行导致的问题。看网上说httplib.h是线程阻塞的,不适合大型项目。按理说咱们一次才几个请求,最多一次几十个http请求,也只能算微微微微微微微微小型的web项目了吧,不应该出现这么严重的阻塞问题。

设备内部分析

设备内部使用的Linux操作系统,有一些网络和系统分析工具,例如ps、netstat等常用工具。

用netstat命令可以查出来TCP/IP的状态

很多Local和Foreign地址都是本机的127.0.0.1,这是不同进程之间的通讯方式。

root@ZOWIECAM:~# netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 127.0.0.1:80            127.0.0.1:34902         TIME_WAIT
tcp        0      0 127.0.0.1:8968          127.0.0.1:51810         TIME_WAIT
tcp        0      0 127.0.0.1:80            127.0.0.1:35232         TIME_WAIT

恰恰有几个是ESTABLISHED状态:

tcp        0      0 192.168.1.90:80         192.168.1.146:8604      ESTABLISHED
tcp        0      0 192.168.1.90:22         192.168.1.56:1246       ESTABLISHED

在TCP连接中,TIME_WAIT和ESTABLISHED是两种不同的状态:

  • ESTABLISHED:表示TCP连接已经成功建立,正在进行数据传输。
  • TIME_WAIT:表示TCP连接已经关闭,但系统仍然在等待一段时间,以确保延迟的数据包不会干扰后续的连接。

为了加快TIME_WAIT状态的TCP连接快点消失掉,特意修改了内核参数:

减少TIME_WAIT状态的持续时间:
调整内核参数来缩短TIME_WAIT状态的持续时间:

sysctl -w net.ipv4.tcp_fin_timeout=30

增加可用端口范围:
增加系统可用的本地端口范围:
sysctl -w net.ipv4.ip_local_port_range="1024 65535"
启用TCP复用:
允许在TIME_WAIT状态下重新使用端口:

批量执行:
sysctl -w net.ipv4.ip_local_port_range="1024 65535"
sysctl -w net.ipv4.tcp_fin_timeout=30
sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w net.ipv4.tcp_tw_recycle=1

设置tcp_fin_timeout、tcp_tw_reuse、tcp_tw_recycle后TIME_WAIT状态的TCP连接消失的快了一些。

等待一段时间后TIME_WAIT状态的连接会很快自动消失,但是这几个ESTABLISHED状态的TCP连接很可疑,一直存在,无论如何都消失不了。

决定找一下这个IP的同事,看看同事的PC上为啥一直与这台设备保持着80端口的连接:

tcp        0      0 192.168.1.90:80         192.168.1.146:8604      ESTABLISHED

根据Foreign Address 的IP为192.168.1.146找到了这台设备的同事。

我问:请问你这台设备在访问1.90这台设备吗?

同事回答:没有呀!

我说:你仔细检查下浏览器是否某个标签页打开了1.90的网页?

同事最后发现:PC上运行着一个软件,这个软件是PC端控制设备端的软件。

同事关闭这个软件后。

又检查了下netstat的1.146这台TCP连接ESTABLISHED的状态,果然消失了。

然后又把其他TCP连接ESTABLISHED的状态的IP去找到了相应的同事,大概又5-6个都打开了该软件。

当这5-6同事的PC关闭该软件后:

顿时天亮了!!!整个网络世界清净了许多。

Web刷新也不卡了,QT操作也流畅很多。

总结

  • 1、webserver需要考虑并发设计;
  • 2、webserver需要考虑sock连接状态,对于哪些特殊的连接状态,需要加强关注;
  • 3、排查问题时发现有时候127.0.0.1的内部请求有时候有900多个。这个需要保持怀疑的态度,时刻警惕!!!
  • 4、对于进程间的通讯我认为如果通讯比较快的话,使用http还是存在风险和稳定性问题的。可以使用:
    • (1)共享内存;
    • (2)管道;
    • (3)dBUS;很合适,支持发布和订阅模式。
    • (4)甚至如果有MQTT集成在内部的话,我认为这个也比较合适。支持发布和订阅模式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2259461.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5分钟掌握 Bootstrap:打造高效、优雅的前端页面

在前端开发中,快速构建响应式、精美的页面是非常重要的任务,而 Bootstrap 是一个功能强大的 CSS 框架,可以帮助开发者轻松实现这一目标。本篇博客将通过代码示例和表格为你详细讲解如何快速上手 Bootstrap。 5分钟掌握 Bootstrap:…

Launcher启动流程

Launcher启动流程分2个阶段: AMS systemReady() 会启动一个临时Activity:com.android.settings.FallbackHome,如下流程等到用户解锁成功后,FallbackHome轮询到有可用的RealHome包,会销毁掉自己,AMS发现没有…

苹果据悉与博通合作开发AI芯片,台积电先进制程将再迎大单

12月13日消息,苹果有意投入自研AI芯片,与博通共同开发,以台积电3纳米制程生产,2026年量产。法人看好,苹果自研AI芯片开发完成后,投片力度可期,台积电先进制程将再迎来大单。据了解,苹…

【含开题报告+文档+PPT+源码】基于微信小程序的点餐系统的设计与实现

开题报告 随着互联网技术的日益成熟和消费者生活水平与需求层次的显著提升,外卖点餐平台在中国市场上迅速兴起并深深植根于民众日常生活的各个角落。这类平台的核心在于构建了一个基于互联网的强大订餐服务系统,它无缝整合了餐饮商户资源与广大消费者的…

【老白学 Java】数字格式化

数字格式化 文章来源:《Head First Java》修炼感悟。 很多时候需要对数字或日期进行格式化操作,来达到某些输出效果。Java 的 Formatter 类提供了很多扩展性功能用于字符串的格式化,只要调用 String 静态方法 format() ,传入参数…

IIS部署程序https是访问出现403或ERR_HTTP2_PROTOCOL_ERROR

一、说明 在windows server 2016中的IIS程序池里部署一套系统,通过https访问站点,同时考虑到安全问题以及防攻击等行为,就用上了WAF云盾功能,能有效的抵挡部分攻击,加强网站的安全性和健壮性。 应用系统一直能够正常…

丸美更名的科技底色

文丨白念云 在当今全球化与科技飞速发展的时代,化妆品行业正历经深刻变革。合成生物学、基因编辑等前沿技术的崛起,重塑着行业生态,开辟出崭新的市场空间。中国作为全球第二大化妆品消费市场,在消费者对品质生活的强烈渴望以及国家…

基于STM32的火灾烟雾报警器设计开题报告

开题报告 题目:基于STM32的火灾烟雾报警器Proteus仿真设计 一、研究背景与意义 随着现代城市化进程的加快,火灾安全问题日益凸显,火灾的早期预警对于减少人员伤亡和财产损失至关重要。传统的火灾报警系统往往依赖于烟雾或温度的单一检测&a…

Docker的镜像

目录 1. 镜像是什么??2. 镜像命令详解2.1 镜像命令清单2.2 docker rmi命令2.3 docker save命令2.4 docker load命令2.5 docker history命令2.6 docker import命令2.7 docker image prune命令2.8 docker build命令 3. 镜像的操作4. 离线迁移镜像5. 镜像存…

【AIGC】ChatGPT保护指令:高效提升GPTs提示词与知识库文件的安全性

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AIGC | GPTs应用实例 文章目录 💯前言💯新建未加保护指令的GPTs测试获取GPTs的提示词Prompt指令与知识库文件 💯给GPTs添加保护指令方法一方法二方法三方法四 💯增强GPT…

算法分析与设计之分治算法

文章目录 前言一、分治算法divide and conquer1.1 分治定义1.2 分治法的复杂性分析:递归方程1.2.1 主定理1.2.2 递归树法1.2.3 迭代法 二、典型例题2.1 Mergesort2.2 Counting Inversions2.3 棋盘覆盖2.4 最大和数组2.5 Closest Pair of Points2.6 Karatsuba算法&am…

Verilog实现图像处理的行缓存Line Buffer

在图像处理中,难免会遇到对图像进行卷积或者模板的局部处理,例如ISP中的一些算法,很大部分都需要一个窗口,在实时视频处理中,可以利用行缓存Line buffer可以暂存几行数据,然后同时输出每行中的对应列的像素…

String【Redis对象篇】

🏆 作者简介:席万里 ⚡ 个人网站:https://dahua.bloggo.chat/ ✍️ 一名后端开发小趴菜,同时略懂Vue与React前端技术,也了解一点微信小程序开发。 🍻 对计算机充满兴趣,愿意并且希望学习更多的技…

Microsemi Libero SoC免费许可证申请指南(Microchip官网2024最新方法)

点击如下链接: https://www.microchip.com/en-us/products/fpgas-and-plds/fpga-and-soc-design-tools/fpga/licensing 点击右侧,请求免费的License 如果提示登录,请先登录Microchip账号。 点击Request Free License。 选项一年免费的Li…

动态规划子序列问题系列一>最长递增子序列的个数

题目: 解析: 这里求最长递增子序列的长度,请看这篇博客:动态规划子序列问题系列一>最长递增子序列-CSDN博客 这里主要运用:一个小贪心状态转移方程的分析方法完成该题 代码: public int fi…

每天40分玩转Django:Django视图和URL

Django视图和URL 一、课程概述 学习项目具体内容预计用时视图基础函数视图、类视图、视图装饰器90分钟URL配置URL模式、路由系统、命名URL60分钟请求处理请求对象、响应对象、中间件90分钟 二、视图基础 2.1 函数视图 # blog/views.py from django.shortcuts import render…

token失效重新存储发起请求

import axios from axios import { MessageBox, Message } from element-ui import store from /store import Router from /router import { getCookie, setToken, setCookie } from ./auth// 因为后端环境区分v1 v2 剔除测试盛传的环境配置,并添加统一前缀 const …

悬赏任务源码(悬赏发布web+APP+小程序)开发附源码

悬赏任务源码是指一个软件或网站的源代码,用于实现悬赏任务的功能。悬赏任务是指发布方提供一定的奖励,希望能够找到解决特定问题或完成特定任务的人。悬赏任务源码通常包括任务发布、任务接受、任务完成和奖励发放等功能的实现。搭建悬赏任务源码是一个…

【一本通】虫洞

【一本通】虫洞 C语言代码C代码JAVA代码 💐The Begin💐点点关注,收藏不迷路💐 John在他的农场中闲逛时发现了许多虫洞。虫洞可以看作一条十分奇特的有向边,并可以使你返回到过去的一个时刻(相对你进入虫洞之…

Linux之条件变量,信号量,生产者消费者模型

Linux之条件变量,信号量,生产消费者模型,日志以及线程池 一.条件变量1.1条件变量的概念1.2条件变量的接口 二.信号量2.1信号量的重新认识2.2信号量的接口 三.生产者消费者模型3.1生产者消费者模型的概念3.2基于阻塞队列的生产者消费者模型3.3…