服务器大量的fin_wait1 状态长时间存在原因分析-1

上文描述了在出现大量fin-wait-1出现的原因,占用的内存等,这里讲一下如何处理这种情况。

首先,fin发送之后,有可能会丢弃,那么发送多少次这样的fin包呢?fin包的重传,也会采用退避方式,在2.6.358内核中采用的是指数退避,2s,4s,最后的

重试次数是由tcp_orphan_retries来限制的。

[[email protected] ~]# cat /proc/sys/net/ipv4/tcp_orphan_retries
0

查看对应版本的内核:

处理的变量是sysctl_tcp_orphan_retries,

/* Calculate maximal number or retries on an orphaned socket. */
static int tcp_orphan_retries(struct sock *sk, int alive)
{
int retries = sysctl_tcp_orphan_retries; /* May be zero. */

/* We know from an ICMP that something is wrong. */
if (sk->sk_err_soft && !alive)
retries = 0;

/* However, if socket sent something recently, select some safe
* number of retries. 8 corresponds to >100 seconds with minimal
* RTO of 200msec. */
if (retries == 0 && alive)----------------------------虽然cat看到的值是0,但其实内核中采用的是8.
retries = 8;
return retries;
}

将这个值改小,我的环境设置为2.

同时,将孤儿socket的数量限制改小。

/proc/sys/net/ipv4/tcp_max_orphans 修改为 500.

修改之后,可以看到内存明显占用释放出来。

由于客户端窗口经常为0,在服务器做一下限速,平稳发包,防止丢包重传之后,引起服务器的软中断也会上升。

时间: 2024-10-13 20:53:28

服务器大量的fin_wait1 状态长时间存在原因分析-1的相关文章

记SpringBoot项目长时间未访问,出现页面找不到的问题

最近某个开发环境的某个应用,隔三差五出现了某某页面找不到,网上百度找了些同类的问题都是说jstl包与默认tomcat里的包冲突,但都感觉和我的问题不是很搭配(因为相同框架的其他项目都可以正常允许) 报错信息如下: 17:40:18.890 [http-nio-8088-exec-18] ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context w

服务器寿命周期内只会关机一次,为什么能够长时间持续工作而不宕机?

首先,服务器能够长时间持续的工作是和其硬件架构及使用环境相关的. 排名第一中提到的火星探测器其实使用的也是IBM P series服务器,并且在探测器里搭载了两台,以实现HA冗余. 生活中的商用服务器为了能够达到用户的不间断持续高可用性的需求,往往都是要使用硬件或者软件层面的集群式配置以达到此方面需求. 从各个平台简单说下,一般的PC SERVER,既大量的存在商业服务器领域的windows或者linux服务器[还不清楚的话,简单来说就是cpu使用的是因特尔生产的],其可靠性是最差的,一年下来,

防止shell脚本长时间运行导致ssh超时

在一些对安全性要求较高的场景下,ssh的超时时间是管理员预先设置好的,在闲置一段时间后ssh连接会自动断开.这种情况下如果通过ssh执行脚本,而脚本运行时间又比较长的话,会导致ssh客户端和服务器长时间无交互而超时,命令执行失败. 使用bash子进程可以解决这种问题,思路是由子进程执行具体的逻辑代码,而由主进程来监控子进程的执行状态,同时向控制台输出字符来keep alive. bash创建子进程有多重方式,这里使用"()",然后用"&"将其放在后台执行.虽

实现iOS长时间后台的两种方法:Audiosession和VOIP(转)

分类: Iphone2013-01-24 14:03 986人阅读 评论(0) 收藏 举报 我们知道iOS开启后台任务后可以获得最多600秒的执行时间,而一些需要在后台下载或者与服务器保持连接的App是如何突破600秒的限制的呢?像网易公开课就可以在后台持续下载,优酷也可以在后台持续缓存,这是怎么做到的呢?一般来说,要实现iOS长时间后台运行,需要声明VOIP.Audio或GPS. Audiosession 实现方法很简单,就是在后台一直播放一个无声的音乐文件,这样就相当于声明了Audio,就可

动态规划之DP中判断是否到达某一状态(最短时间是什么)?

codevs1684 垃圾陷阱 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 卡门——农夫约翰极其珍视的一条Holsteins奶牛——已经落了到“垃圾井”中.“垃圾井”是农夫们扔垃圾的地方,它的深度为D (2 <= D <= 100)英尺. 卡门想把垃圾堆起来,等到堆得与井同样高时,她就能逃出井外了.另外,卡门可以通过吃一些垃圾来维持自己的生命. 每个垃圾都可以用来吃或堆放,并且堆放垃圾不用花费卡门的时间. 假设卡门预先知道

程序长时间后台保持运行

文一 我从苹果文档中得知,一般的应用在进入后台的时候可以获取一定时间来运行相关任务,也就是说可以在后台运行一小段时间. 还有三种类型的可以运行在后以, 1.音乐 2.location 3.voip 文二 在IOS后台执行是本文要介绍的内容,大多数应用程序进入后台状态不久后转入暂停状态.在这种状态下,应用程序不执行任何代码,并有可能在任意时候从内存中删除.应用程序提供特定的服务,用户可以请求后台执行时间,以提供这些服务. 判断是否支持多线程 UIDevice* device = [UIDevice

app开发周期一般多长时间?【专业分析】

在外包app之前,很多朋友会问做一款app大概需要花费多长时间,但这个问题实际上是没有标准答案的.因为每款app的功能需求都不一样,而功能需求是决定app外包开发时间的最重要因素,功能越简单越少,开发时间自然就短.所以想要知道app开发周期一般多长时间,首先要明确你的功能需求才能够进一步判断,然而这个周期我们是没法改变的.当然除了app本身的功能需求之外还有一些人为的主观因素可能会影响到app的外包时长,今天我们就来谈谈这个. 第一,App开发进度表 项目开始前一定要求乙方(app开发商)提供开

Azure编程笔记(5):长时间的异步操作带来的问题

?? 内容提要 Azure Storage里很多操作需要花费很长的时间.为了提高效率,这些耗时的操作是以异步的方式响应的.也就是说调用这些操作对应的函数虽然结束,但背后的操作可能还要持续一段时间.如果没有合理的对待从函数返回到操作真正结束这段时间,我们的程序就有可能出现问题.下面以删除CloudTable为例讨论这类问题. 问题描述 我们写一个简单的单元测试的Class来重现这个问题.首先我们定义两个函数,分别用来初始化测试函数和清理测试函数所留下的数据.函数InitializeTest初始化一

ubuntu常用命令总结(整理好长时间所得)

1.df命令 # df -ha 显示所有的档案以及分区的使用情况 # df -h /dev/sda1 显示sda1的磁盘使用情况 # df -T 显示每个分区的所属的档案系统名称,也会显示分区的格式类型(比如ext3) 注:h参数表示转换为M,G等人们常用的磁盘空间单位显示 2.du命令 # du -h src 显示src目录中各个文件(或者文件)所占用的磁盘空间 # du -hs /usr 显示usr目录中所有文件的总大小 # du -h test.c 显示test.c文件所占用的磁盘空间 3