草庐IT

Linux- 系统随你玩之--微服务应用出现极少概率会时断时续,它抽风了吗?

风一样的美狼子 2023-04-11 原文

文章目录

1、背景

时下各种分布式架构服务应用大行其道,微服务部署成为大多数WEB服务的标配。
所谓的分布式架构就是把服务做拆分,在我们的传统单体架构中,我们把所有的服务都写在一起,随着业务的扩大我们的代码耦合度会变得越来越高,后期维护起来也很不方便。微服务就是把模块拆分,把我们整个项目拆解分成许多独立的子项目,每个子项目之间独立开发和部署,子项目也有自己独立的功能,这些独立的子项目就形成了微服务,不同的子项目就进而形成一个服务集群。
一次工作中遇到有人反馈说我们线上的某应用出现服务不稳定的情况,绝大部分时候都正常,只有
极少数情况下会出现连接时断时续的情况。

2、问题及解决方法

2.1、问题排查

后面经过服务监控与日志分析发现了其中一台节点存在问题。检查发现是该节点网络存在断开或掉包的情况。经过一系列各种排查发现问题在于网线。表面看网线、水晶头做的很好,没问题。
问题其实是网卡的传输速度和双工模式,双工模式不表,主要是速率,我们强制关闭掉网卡的AUTO自动侦测速度,给网卡强制降速在一个固定速度运行。

2.2、可能有人就会问为什么要关闭AUTO固定速度降速运行呢

事实上,是我们发现网线的质量不是很高,没有屏蔽层,铜线较细,铜线线材可能含有杂质,造成信号传递时抗干扰能力弱,而且信号质量较差,而这种情况下出现的网络卡慢、及频繁断开问题,并非是网络完全不通,而是网络在传输过程中频繁的自动切换速率,如果千兆降为百兆的速度运行吧,信号质量又不够,速度极慢还容易断开,然后又自动降速,造成了在使用中的各种频繁断开,或者极为缓慢的情况。

2.3、解决方法

我们的网线较长有20多米,还是那种没有屏蔽层 传递时抗干扰能力就很弱容易出现异常。虽然我们临时改为强制降速固定速度运行,但最好尽快换成带有屏蔽层的.优质线材保证信号质量!
 排查过程中我们使用到了今天的主角也是针对网络和系统管理员的必备利器,它就是netstat

3、netstat介绍

netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。
一般用于检验本机各端口的网络连接情况。netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。

3.1、 常用功能选项

netstat命令的一般格式:

netstat [1][-a][-e][-n][-o][-p Protocol][-r][-s][Interval]

netstat [参数选项]

-a或–all:显示所有连线中的Socket,默认不显示LISTEN相关;
-A<网络类型>或–<网络类型>:列出该网络类型连线中的相关地址;
-c或–continuous:每隔一个固定时间,执行该netstat命令。
-C或–cache:显示路由器配置的快取信息;
-e或–extend:显示网络其他相关信息;
-F或–fib:显示FIB;
-g或–groups:显示多重广播功能群组组员名单;
-h或–help:在线帮助;
-i或–interfaces:显示网络界面信息表单;
-l或–listening:显示监控中的服务器的Socket;
-M或–masquerade:显示伪装的网络连线;
-n或–numeric:直接使用ip地址,而不通过域名服务器;
-N或–netlink或–symbolic:显示网络硬件外围设备的符号连接名称;
-o或–timers:显示计时器;
-p或–programs:显示正在使用Socket的程序识别码和程序名称;
-r或–route:显示Routing Table;
-s或–statistice:显示网络工作信息统计表;
-t或–tcp:显示TCP传输协议的连线状况;
-u或–udp:显示UDP传输协议的连线状况;
-v或–verbose:显示指令执行过程;
-V或–version:显示版本信息;
-w或–raw:显示RAW传输协议的连线状况;
-x或–unix:此参数的效果和指定”-A unix”参数相同; –ip或–inet:此参数的效果和指定”-A inet”参数相同。

3.2、输出内容


从输出的整体上看,netstat的输出结果可以分为两个部分:

  1. Active Internet connections,称为有源TCP连接,其中"Recv-Q"和"Send-Q"指%0A的是接收队列和发送队列。这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到。
  2. Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。
    Proto显示连接使用的协议,RefCnt表示连接到本套接口上的进程号,Types显示套接口的类型,State显示套接口当前的状态,Path表示连接到套接口的其它进程使用的路径名。

3.3、常见状态

就是我们常说的连接状态。
在原模式中没有状态,在用户数据报协议中也经常没有状态,于是状态列可以空出来。
若有状态,通常取值为:

LISTEN: 侦听来自远方的TCP端口的连接请求
SYN-SENT: 在发送连接请求后等待匹配的连接请求
SYN-RECEIVED : 在收到和发送一个连接请求后等待对方对连接请求的确认
ESTABLISHED: 代表一个打开的连接
FIN-WAIT-1: 等待远程TCP连接中断请求,或先前的连接中断请求的确认
FIN-WAIT-2: 从远程TCP等待连接中断请求
CLOSE-WAIT:等待从本地用户发来的连接中断请求
CLOSING: 等待远程TCP对连接中断的确认
LAST-ACK: 等待原来的发向远程TCP的连接中断请求的确认
TIME-WAIT: 等待足够的时间以确保远程TCP接收到连接中断请求的确认
CLOSED:没有任何连接状态

4、netstat实操

4.1、常用显示输出操作

4.1.1、列出所有端口 (包括监听和未监听的)

列出所有当前的连接。使用 -a 选项即可

  • 列出所有端口 netstat -a
  • 显示 tcp 端口 netstat -at
  • 显示 udp 端口 netstat -au

4.1.2、列出所有处于监听状态的 Sockets

  • 只显示监听端口 netstat -l
  • 显示监听 tcp 端口 netstat -lt
  • 显示监听 udp 端口 netstat -lu
  • 显示监听 UNIX 端口 netstat -lx

4.1.3、显示每个协议的统计信息

  • 显示所有端口的统计信息 netstat -s
  • 显示 TCP 或 UDP 端口的统计信息 netstat -st 或 -su
  • netstat -st 或 netstat -su

4.1.4、显示每个协议的统计信息

在 netstat 输出中显示 PID 和进程名称 netstat -p
netstat -p 与其它参数一起使用就可以添加 “PID/进程名称” 到 netstat 输出中,这样 debugging 的时候可以很方便的发现特定端口运行的程序。

netstat -pt

4.1.5、不显示主机,端口和用户名(host, port or user)

当你不想让主机,端口和用户名显示,使用 netstat -n。将会使用数字代替那些名称。

netstat -an

4.1.6、持续输出netstat信息

netstat -c将每隔一秒输出网络信息。
netstat -interval 隔interval秒显示一次,ctrl+c结束。

4.1.7、显示核心路由信息 netstat -r

使用netstat -rn显示数字格式,不查询主机名称。

4.1.8、显示网络接口列表

netstat -i

4.2、常用查找输出操作

4.2.1、找出程序运行的端口

并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息。

netstat -tunlp | grep ssh

4.2.2、找出运行在指定端口的进程

netstat -an | grep ‘:80’

4.2.3、通过端口找进程ID

netstat -tunlp | grep 80 | awk ‘{print $7}’ | cut -d/ -f1

4.2.4、显示每个连接相关的进程

netstat -o 可以与-a -n -p联合使用

4.2.5、IP和TCP分析

查看连接某服务端口最多的的IP地址

netstat -nat | grep "27.158.127.108:8327" |awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -25

4.2.6、统计TCP各种状态列表

netstat -nat |awk '{print $6}'netstat -n | awk '/^tcp/{++S[$NF]}END{for(i in S) print i,S[i]}' 
  1. 先把状态全都取出来,然后使用uniq -c统计,之后再进行排序。

netstat -nat |awk ‘{print $6}’|sort|uniq -c

最后的命令如下:

netstat -nat |awk ‘{print $6}’|sort|uniq -c|sort -rn

4.2.7、分析access.log获得访问前5位的ip

awk ‘{print $1}’ access.log |sort|uniq -c|sort -nr|head -5

6、结语

如果你的计算机有时候接收到的数据包导致出错数据或故障,你不必感到奇怪,TCP/IP可以容许这些类型的错误,并能够自动重发数据包。但如果累计的出错情况数目占到所接收的IP数据报相当大的百分比,或者它的数目正迅速增加,那么你就应该使用netstat查一查为什么会出现这些情况了。

有关Linux- 系统随你玩之--微服务应用出现极少概率会时断时续,它抽风了吗?的更多相关文章

  1. ruby - 将差异补丁应用于字符串/文件 - 2

    对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl

  2. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  3. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  4. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  5. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

  6. ruby-on-rails - 如何在 Gem 中获取 Rails 应用程序的根目录 - 2

    是否可以在应用程序中包含的gem代码中知道应用程序的Rails文件系统根目录?这是gem来源的示例:moduleMyGemdefself.included(base)putsRails.root#returnnilendendActionController::Base.send:include,MyGem谢谢,抱歉我的英语不好 最佳答案 我发现解决类似问题的解决方案是使用railtie初始化程序包含我的模块。所以,在你的/lib/mygem/railtie.rbmoduleMyGemclassRailtie使用此代码,您的模块将在

  7. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  8. 叮咚买菜基于 Apache Doris 统一 OLAP 引擎的应用实践 - 2

    导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵

  9. 电脑0x0000001A蓝屏错误怎么U盘重装系统教学 - 2

      电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。  准备工作:  1、U盘一个(尽量使用8G以上的U盘)。  2、一台正常联网可使用的电脑。  3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。  4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。  U盘启动盘制作步骤:  注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注

  10. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

随机推荐