自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 SonarQube 8.7 升级

SonarQube版本升级升级路径:7.4 ->7.9.5 LTS -> 8.7.0其它版本升级路径请根据官网查询:https://docs.sonarqube.org/latest/setup/upgrading/升级流程7.4 Mysql -> 7.4 PgSQL -> 7.9.5 PgSQL -> 8.7.0 PgSQL强制性依赖SonarQube 7.9版之后只支持 JAVA11+sudo yum install java-11-openjdk -y

2021-03-03 09:41:45 2380 2

原创 Resolving deltas: 100% 卡住问题

问题:线上composer代码库拉取代码安装,一个小小的SDK竟然耗时达20s。Initialized empty Git repository in /home/xxxx/.git/Server supports multi_ack_detailedServer supports side-band-64kServer supports ofs-deltawant 81edfc0a329820af89c369c541a3e83eb51e7ad8 (refs/heads/master)want

2020-09-16 15:08:08 7025 9

原创 高并发服务器的TIME_WAIT问题

这里探讨一下由于并发过大导致大量TIME_WAIT的问题以及解决方案要说明TIME_WAIT的问题,需要解答以下几个问题:1. Peer两端,哪一端会进入TIME_WAIT呢?为什么?相信大家都知道,TCP主动关闭连接的那一方会最后进入TIME_WAIT。那么怎么界定主动关闭方呢?是否主动关闭是由FIN包的先后决定的,就是在自己没收到对端Peer的FIN包之前自己发出了FIN包,那么自己就是主动关闭连接的那一方?Peer两边都是主动关闭的一方,两边都会进入TIME_WAIT。为什么是主动关闭的一方进行

2020-07-31 12:08:04 1058

原创 拥塞控制

概念拥塞控制是TCP避免网络拥塞的算法,是互联网上主要的一个拥塞控制措施。主要的目标是***提高网络利用率、降低丢包率、保证网络资源对每条数据流的公平性*。它使用一套基于线增积减模式的多样化网络拥塞控制方法(包括慢启动和拥塞窗口等模式)来控制拥塞。在互联网上应用中有相当多的具体实现算法。拥塞算法TCP Tahoe/Reno最初的实现,包括慢启动、拥塞避免两个部分。基于重传超时(retransmission timeout/RTO)和重复确认为条件判断是否发生了丢包。两者的区别在于:Tahoe算法

2020-07-30 10:44:20 6637

原创 三次握手

为什么恰好是三次握手?TCP作为一种可靠传输控制协议,其核心思想:既要保证数据可靠传输,又要提高传输的效率,三次恰好可以满足上述的需求。而三次也是保证双方能够明确对方能收发的最低值。第一次: C->S,S可以确认C的发送正常第二次: C<-S,C可以确认S的收发正常第三次: C->S,S可以确认C的接收正常理论上讲不论握手多少次都不能确认一条信道是"可靠"的,但通过3次握手可以至少确认它是"可用"的,再往上加握手次数不过是提高"它是可用的"这个结论的可信程度。包分析有关安.

2020-07-24 09:43:19 146

原创 iotop

简介iotop是一个用来监视磁盘I/O使用状况的top类工具。基于内核核算统计信息。iotop需要内核2.6.20或者更新的版本(可能早一点的版本也可以,取决于向下移植的状态),以及以下的内核选项:CONFIG_TSAK_DELAY_ACCT、CONFIG_TSAK_IO_ACCOUNTING、CONFIG_TASKSTATS和CONFIG_VM_EVENT_COUNTERS。安装yum ...

2020-03-03 10:21:53 1663

原创 磁盘工具 iostat

简介iostat汇总了单个磁盘的统计信息,为负载特征归纳、使用率和饱和度提供了指标。它可以由任何用户执行,通常是在命令行调查磁盘I/O问题使用的第一个命令。统计信息的来源直接由内核维护,因此这个工具的开销基本可以忽略不计。"iostat"是"I/O Statistics"的简称,虽然其实最好称之为"diskiostat"以突出它报告的I/O类型。这偶尔会造成一些误解,比如当一位用户知道一个应用...

2020-02-24 18:01:15 234

原创 gitlab 滚动升级 升级流程

描述:由于项目需要把gitlab升级到最新版本目前版本:8.16.5目标版本:12.7.5升级路径GitLab不支持直接跨版本升级,需按照官方指南一步步向上升级这样我们的升级路径就是:8.16.5->8.17.7->9.5.10->10.8.7->11.3.4->11.11.8->12.0.9->12.7.5备份数据gitlab-rake ...

2020-02-20 17:11:25 1470 2

原创 sudo 普通用户环境变量传递问题

问题:普通用户sudo执行时候会引起软件环境变量方面的困扰。主要是因为切换用户时候环境变量会reset,只会保留特定的。解决方法:修改sudoers文件:sudo visudosudo vim /etc/sudoers1.环境变量不重置Defaults !env_reset---------or-------------Defaults:用户名 !env_reset2.把需要...

2019-12-07 17:35:50 825

原创 内存回收机制

内存回收的方式直接回收:发生内存分配,而此时的剩余空闲内存不足时,会执行立即内存回收。定期回收:专门的内核线程kswapd0定期回收内存。Linux 内存回收的具体方法页缓存:通过LRU算法回收文件页缓存。包括cache、buffer,通过内存映射的文件映射页。通过换出守护进程(kswapd)执行换页,它找出最近不使用的页加入到空闲链表,其中包括应用程序内存。页面换出涉及写入文件系统或...

2019-11-28 17:33:36 1785

原创 内存概念、术语

主存物理内存,计算机的高速数存储区域,动态随机访问内存(DRAM)。常驻内存当前处于主存中的内存。虚拟内存一个抽象的主存概念,它几乎是无限的和非竞争性的。虚拟内存不是真实的内存。他向每个进程和内核提供巨大的、线性的而且私有的地址空间。它简化了软件开发,把物理内存的分配交给操作系统管理。它也支持多任务,因为虚拟地址空间被设计成分离的,而且可以超额订购,即使用中的内存可以超出主内存的容量。...

2019-11-27 11:36:11 638

原创 Linux SAR命令

SAR 是一个系统活动报告工具,既可以实时查看系统的当前活动,又可以配置保存和报告历史统计数据。安装: yum -y install sysstatCPU-P ALL 表示监控所有 CPU 间隔1秒-u ALL 打印所有cpu指标输出项详细说明%user表示处理用户进程所使用CPU的百分比%user表示处理用户进程所使用CPU的百分比%nice表示...

2019-11-19 16:39:54 395

原创 CPU 一些概念术语

处理器:插到系统插槽或者处理器上的物理芯片,以核或者硬件线程的方式包含一块或者多块CPU。核:一颗多核处理器上的一个独立的CPU实例。硬件线程:一种支持在一个核上同时执行的多个线程的CPU架构(包括超线程技术),每个线程是一个独立CPU实例,这种扩展方式又称为多线程CPU指令:单个CPU操作,来源于它的指令集。指令用于算术操作,内存IO,逻辑控制。逻辑CPU:又称为虚拟处...

2019-10-16 14:59:43 1535

原创 Linux 平均负载

uptime 是查看平均负载的工具之一$ uptime 11:01:36 up 161 days, 16:32, 1 user, load average: 0.59, 0.39, 0.37最后三个数字分别表示1、5、15分钟内的平均负载。平均负载表示对CPU资源的需求,通过汇总"正在运行的线程数"和"排队等待运行的线程数"计算得出。平均负载大于CPU数量,表示CPU不足以服务...

2019-10-14 11:58:30 158

原创 /proc

这是一个提供内核统计信息的文件系统接口。由内核动态创建,不需要任何存储设备。多数为只读,提供观察数据,一部分可写用于控制内核行为。/proc包含很多目录,其中以进程ID命名的目录代表就是那个进程。这些目录下众多文件包含了进程的信息和统计信息,由内核数据映射而来。limits:实际的资源限制 maps:映射的内存区域 sched:CPU调度的各种统计 schedstat:CPU运行...

2019-09-10 16:19:40 3661

原创 pip 指定源安装

阿里源pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/豆瓣pip install -r requirements.txt -i https://pypi.douban.com/simple/清华大学pip install -r requirements.txt -i https:...

2019-09-02 15:39:34 25799

原创 TCP 首部格式

源端口表示发送端端口,字段长度16位。目标端口表示接收端端口,字段长度16位。序列号(Sequence Number)字段长32位。指发送数据的位置。每发送一次数据,就会累加一次该数据字节的大小。序列号不会从0或1开始,建立连接时计算机随机生成初始值,通过SYN包传给接收端主机。然后将每转发过去的字节数累加到初始值上表示数据位置。此外,在建立连接和断开连接时发送SYN包和FIN...

2019-08-28 14:17:16 382

原创 UDP 首部格式

源端口:表示发送端端口,字段长度16位。可选项,有时候可能不会设置源端口号。没有源端口号的时候该字段的值设置为0。可用于不需要返回的通信中。目标端口:表示接收端端口,字段长度16位。包长度:该字段保存了UDP首部的长度跟数据长度之和。单位为字节(8位的字节),实际最大长度不可能超过65507字节 2^16(635535) - 8字节UDP报头 − 20字节IP头部校验和:校...

2019-08-27 18:37:04 5057

原创 ICMP协议 (Internet Control Message Protocol)

互联网控制消息协议(英语:Internet Control Message Protocol,缩写:ICMP)是互联网协议族的核心协议之一。它用于网际协议(IP)中发送控制消息,提供可能发生在通信环境中的各种问题反馈。通过这些信息,使管理者可以对所发生的问题作出诊断,然后采取适当的措施解决。报文类型ICMP协议的消息大致分为两类:Type(出错原因的错误消息)Code(诊断的查询消息)...

2019-08-22 12:11:18 1539

原创 ARP协议(Address Resolution Protocol)

ARP概要ARP是一个通过解析网络层地址来找寻数据链路层地址的网络传输协议。确定了IP地址,就可向这个地址发送IP数据报。然而,在数据链路层,进行实际通信时必须要知道每个IP地址对应的MAC地址。以目标IP地址为线索,用来定位接收数据包的网络设备对应的MAC地址。如果目标主机不在同一个链路上时,可以通过ARP查找下一跳路由器的MAC地址。ARP只适用于IPv4,不能用于IPv6。IPv6...

2019-08-21 14:12:22 2252

原创 IPv6 头

版本和IPv4一样,4比特构成。其版本号为6,因此这个字段上的值为"6"通信量类(Traffic Class)相当于IPv4的TOS字段流标号(Flow Label)20比特构成,用于服务质量控制。使用这个字段提供怎么样的服务已经成为未来的研究课题,不使用Qos时每一位可以全部设为0。进行服务控制时,将流标号设置为一个随机数,然后利用一种可以设置流的协议RSVP在路由器...

2019-08-20 11:22:50 945

原创 IPv4 头

版本:由4比特构成标识IP首部的版本号,关于IP的所有版本如下图首部长度、报头长度(IHT):由4比特构成。表示IP报头的大小,单位4字节。对于没有可选项的IP包,首部长度设置为"5",也就是当没有可选项时,IP首部长度为20字节区分服务(服务类型):由8比特构成,用于表示服务质量。总长度:表示IP首部与数据部分合起来的总字节数,该段16比特,包最大长度2^...

2019-08-16 15:53:48 784

原创 TCP Window Scale 与 接收窗口

TCP刚发明的时候,全世界的网络带宽都很小,所以最大的接受窗口被定义成65535字节,随着硬件的革命性进步,65535已经成为性能瓶颈,而TCP头只给接收窗口值留了16bit,解决方案就是在三次握手时是,把自己的Window Scale告知对方。Window Scale放在TCP头之外的Options中,向对方声明一个Shilt count,把它作为2的指数,再剩以TCP头中定义的接收窗口,就得到...

2019-07-10 11:36:20 10176 1

原创 TCP 滑动窗口

TCP滑动窗口主要有两个作用,可靠性、流控滑动窗口的基本概念A-B之间新建立了一条tcp连接,A需要发送一段很大的数据流,B无法一次性接受,所以它限制设备A每次发送数据分段的数量,每次分段中已发送的字节数得到确认之后,就会左移开始下一个分段。任一时间点对于这一过程,发送方可以将TCP buffer中的数据分为以下四类,并把它们看作一个时间轴1. 已发送已确认2. 已发送但尚未确认3...

2019-07-09 18:20:09 4090 3

原创 TCP 的 MTU & MSS

MTU:最大传输单元,大多数网络MTU是1500字节,有些网络启用了巨帧,能达到9000字节。MSS:最大分段大小(TCP数据包每次能够传输的最大报文段长度)TCP不会简单地把数据一口气传给网络互联层,而是根据双方的MTU决定每次传多少,如果获得双方的MTU呢?三次握手时双方会把自己的MSS告诉对方,MSS+TCP头+IP头,就得到MTU了151包里客户端声明mss是1460,意...

2019-07-05 16:52:08 4554

原创 TCP 超时重传

简介:如果一个包真的丢了,又没有后续包可以在接收方触发dup ack,就不会快速重传,这种情况只好等到超时了再重传如上图:服务器发送了原始包22580,之后一直等不到相应的ack,于是之后重传(包22698)TCP可靠性中最重要的一个机制是处理数据超时和重传。TCP协议要求在发送端每发送一个报文段,就启动一个定时器并等待确认信息;接收端成功接收新数据后返回确认信息。若在定时器超时前数据未能...

2019-07-01 14:18:50 487

原创 TCP 快速重传

简介:当发送方收到三个或以上的冗余ACK(duplicate ACK),就意识到之前发的包可能丢了,于是快速重传它如图所示,报文段1成功接收并被确认ACK 2,接收端的期待序号为2,当报文段2丢失,报文段3失序到来,与接收端的期望不匹配,接收端重复发送冗余ACK 2。上图服务器收到4个Ack=49967670,于是在52059号包重传了Sep=49967670...

2019-07-01 10:49:28 3707

原创 TCP 延迟确认

简单描述:收到一个包之后,暂时没有什么数据要发给对方,延迟一段时间之后再确认(一般200ms以上),假如在这段时间里恰好有数据要发送,那确认信息和数据就可以在一个包里面发出去了上图是开启了延迟确认,等待200ms再回复确认下图是关闭了延迟确认,收到后就马上回复ack好处:假如在延迟确认这段时间里刚好有包要发,就可以在发数据的时候把确认信息带过去,省了一个纯粹的确认包,很多...

2019-06-20 10:14:54 2211

原创 mpstat

mpstat是常用的多核 CPU 性能分析工具,用来实时查看每个 CPU的信息用法:mpstat -P CPU 时间间隔 采集次数mpstat -P ALL 1 5 # 所有的cpu 间隔一秒 输出五组mpstat -P 0 1 5 # 第一颗cpu间隔一秒 输出五组# -P ALL 表示监控所有 CPU,后面数字 5 表示间隔 5 秒后输出一组数据$ mpstat -P ...

2019-03-22 17:07:23 292

原创 Linux 常用文本处理命令,常用指令参数

文本处理: cut,sort,uniq,grep cut: -d: 指定字段分隔符,默认是空格 -f: 指定要显示的字段 -f1 显示第一个字段 -f 1,3 显示第一个和第三个 -f 1-3 显示第一个到第三个 --complement: 反向列选择 ...

2018-10-29 11:13:00 340 1

原创 iptables

iptables是一个配置Linux内核防火墙的命令行工具,是netfilter项目的一部分。iptables 可以检测、修改、转发、重定向和丢弃 IPv4 数据包。过滤 IPv4 数据包的代码已经内置于内核中,并且按照不同的目的被组织成表的集合。表由一组预先定义的 链组成,链包含遍历顺序规则。每一条规则包含一个谓词的潜在匹配和相应的动作(称为目标),如果谓词为真,该动作会被执行。iptables...

2018-05-11 17:12:30 381

原创 Django cached_property

Django中的cached_property通过属性描述符实现属性描述符:实现了特定协议的类,这个协议包括 __get__、 __set__ 和 __delete__ 方法。描述符的用法是,创建一个实例,作为另一个类的类属性import datetimeclass cached_property(object): """ Decorator that convert

2018-01-29 12:18:01 2646

原创 Django Lazy LazyObject

LazyObject源码地址:django/utils/functional.pyimport copyimport operatorempty = object()def new_method_proxy(func): def inner(self, *args): if self._wrapped is empty:

2018-01-26 16:43:18 2205

原创 python nginx time_local

python程序需要输出nginx格式的日志供使用import timefrom datetime import datetime# 获取今天的时间戳 2017/12/29 0:0:0today = time.strptime(time.strftime("%Y%m%d"), "%Y%m%d")time_stamp = int(time.mktime(today))# 格式成ng

2017-12-29 17:55:21 1303

原创 iptables 笔记

*filter # 星号开头的指的是表格,这里为 filter:INPUT ACCEPT [10:1493] # 通过本链的有10个包,共1493字节。 该规则表示INPUT表默认策略是ACCEPT:FORWARD ACCEPT [0:0]:OUTPUT ACCEPT [12579729:10415351541]-A INPUT -s 192.168.1.139/32 -p tcp

2017-12-21 09:42:38 347

原创 logstash grok 多项匹配

业务场景:新版本日志需要添加字段,需要兼容新旧日志匹配版本:logstash-2.3filter { grok { match =&gt; [ "message" , "%{DATA:hostname}\|%{DATA:tag}\|%{DATA:types}\|%{DATA:uid}\|%{GREEDYDATA:msg}", ...

2017-12-05 10:07:39 23046 1

原创 python pickle模块 序列化

Python内置的pickle模块能够将Python对象序列成字节流,也可以把字节流反序列成对象。import pickleclass Student: def __init__(self, name, age): self.name = name self.age = age def say(self): print("I am", self.name) >>

2017-12-01 11:48:23 396

原创 Python @contextmanager修饰器

开发者可以使用内置的contextlib模块来处理自己所编写的对象和函数,使它们能够支持with语句。该模块提供了名为contextmanager的修饰器。函数只需要经过contextmanager修饰,即可用在with语句之中。这样做比标准写法更便捷。如果按照标准方式来做,那么要定义新类,并提供名为__center__和__exit__的特殊方法from contextlib import

2017-11-30 10:37:53 1347

原创 python @wraps修饰器

def decorator1(func): def wrapper(*args, **kwargs): '''decorator''' print('Calling decorated function...') return func(*args, **kwargs) return wrapper@decorator1

2017-11-29 16:44:57 418

原创 Python __getattr__ __getattribute__ __setattr__

__getattr__如果某类定义了__getattr__,同时系统在该类对象的实例字典中又找不到待查询的属性,系统就会调用这个方法,这种行为非常适合无结构数据的按需访问。class A: def __init__(self): self.name = 'Tom' def __getattr__(self,name): set

2017-11-23 20:07:20 471

提示
确定要删除当前文章?
取消 删除