比top更好用-可查看全部进程及某个进程的线程的linux命令Htop以及遇到服务端大量连接出现CLOSE_WAIT的问题排查解决

一、比top更好用-可查看全部进程及某个进程的线程的linux命令Htop

    可以使用命令top -H -p <pid>可以查看线程,不过有一个更好用的命令htop,htop算是top的升级版,top只能查看当前屏的数据,htop可以让你在垂直和水平方向上滚动,从而看到运行的所有进程,以及他们完整的命令行 publish:November 21, 2018 -Wednesday。

    htop 是Linux系统中的一个互动的进程查看器,一个文本模式的应用程序(在控制台或者X终端中),需要ncurses。与Linux传统的top相比,htop在启动上比top更快,而且杀进程时不需要输入进程号,并且支持鼠标操作,支持颜色主题,总之htop更加人性化,centos上使用yum安装即可:

[ffv@s2 ~]$ yum install htop
#安装后直接招待htop,显示界面如图:
[ffv@s2 ~]$ htop

htop显示的部分总共分为四个区域:

第一区域:CPU、内存、Swap的使用情况;

第二区域:任务、线程、平均负载及系统运行时间的信息。

        平均负载部分提供了三个数字,这仅仅表示的是过去的5分钟、10分钟和15分钟系统的平均负载而已,在单核的系统中平均负载为1表示的是百分之百的 CPU 利用率。最后,运行时间 (uptime)标示的数字是从系统启动起到当前的运行总时间。

第三区域:当前系统中的所有进程。这个和top差异不大,各列说明如下:

PID:进程标志号,是非零正整数
USER:进程所有者的用户名
PR:进程的优先级别
NI:进程的优先级别数值
VIRT:进程占用的虚拟内存值
RES:进程占用的物理内存值
SHR:进程使用的共享内存值
S:进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数
%CPU:该进程占用的CPU使用率
%MEM:该进程占用的物理内存和总内存的百分比
TIME+:该进程启动后占用的总的CPU时间
COMMAND:进程启动的启动命令名称

第四区域:底部菜单栏,列出来F1-F10功能键

        进入界面后,可以用鼠标点击下面的进程,然后使用方向键上向移动,点击某个进程后,可以看到下面的菜单栏也跟着变化,比如选择后可以使用F9杀死进程,可以使用F5进行排序。总之菜单的意义一看就知道。

二、遇到服务端大量连接出现CLOSE_WAIT的问题排查解决 

    访问服务器接口报警,浏览器中请求接口发现http请求一直在响应中,最后都执行出错。登录服务器负载内存数据都正常,但请求半天没有执行结果就感觉发送的请求服务器没有收到一样。查看nginx日志发现很多499错误,499错误的原因是客户端关闭了连接:nginx出现499错误码的原因以及proxy_ignore_client_abort配置 及 nginx日志配置变量大全意义详解_nginx 499-CSDN博客。客户端为什么关闭了连接呢?查看服务器端的连接情况,发现统计如下: 

[online@USER-04 nginx]$ sudo netstat -tnp | awk '{print $6}' | sort | uniq -c
      1 
  40493 CLOSE_WAIT
   3110 ESTABLISHED
     21 FIN_WAIT1
     37 FIN_WAIT2
      1 Foreign
     96 LAST_ACK
      8 SYN_RECV
   5777 TIME_WAIT
[online@USER-04 nginx]$ ulimit -n
65535

     上面可以看到有大量的CLOSE_WAIT状态的连接,这肯定不正常,而且从数据上一看就发现这些连接加起来已经快达到了ulimit -n连接数了。

#. 关于CLOSE_WAIT状态

    TCP协议规定,对于已经建立的连接,网络双方要进行四次握手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死状态,连接本身占用的资源不会被释放。网络服务器程序要同时管理大量连接,所以很有必要保证无用连接完全断开,否则大量僵死的连接会浪费许多服务器资源.
    客户端TCP状态迁移:CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED
    服务器TCP状态迁移:CLOSED->LISTEN->SYN收到->ESTABLISHED->CLOSE_WAIT->LAST_ACK->CLOSED

    在断开的过程中,主动关闭的一方发出FIN,同时进入FIN_WAIT1 状态,被动关闭的一方响应ACK,从而使主动关闭的一方迁移至FIN_WAIT2状态,接着被动关闭的一方同样会发出FIN,主动关闭的一方响应ACK,同时迁移至TIME_WAIT状态。从这个逻辑来看,服务端进入了CLOSE_WAIT状态说明服务器端已经到了响应客户端关闭时请求的FIN, 但还没有发出自己的FIN。于是我在服务器上进行了重启nginx和php服务,发现无用。然后我进一步查看CLOSE_WAIT状态是哪种连接的数据,通过netstat统计发现全都是PHP进程的状态,可以代入理解,上面的TCP状态迁移中客户端就是nginx,服务端就是php,最后php未发出自己的FIN从而停留在了CLOSE_WAIT状态,为什么会产生这么多的CLOSE_WAIT呢?

    在发现是php存在大量的CLOSE_WAIT状态后,我深度杀死php,然后再重启php,发现这个凑效,请求就正常了,但通过netstat发现CLOSE_WAIT状态的数量会在持续增加,没多久就超过了万,然后继续增大,于是我怀疑是有请求在攻击,通过对访问日志中的IP进行统计,发现统计最靠前的IP存在明显异常,占了总服务器请求的一半,而且请求频率超频繁,在持续刷入。

    于是我修改了一下nginx配置文件,增加了一行deny记录,杀掉php再启动php(注意这里使用kill -USR2处理不能解决)。但为什么这个IP大量请求会产生这么多CLOSE_WAIT状态呢?简单看了一下程序也没有发现什么异常,

    其它:不知道php的配置:request_terminate_timeout 会不会对此起作用。目前服务器上的此项我看用的是php的默认值即0,但是按照上面的逻辑,即便修改此值,也只是缓解,并不能解决问题。如果这个IP的攻击请求频率再加大,就会出现异常了。另外我上面是直接deny了IP,也可以使用nginx的扩展来限制IP的请求频率。

  • 27
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
智慧校园2.0是高校信息化建设的新阶段,它面对着外部环境变化和内生动力的双重影响。国家战略要求和信息技术的快速发展,如云计算、大数据、物联网等,为智慧校园建设提供了机遇,同时也带来了挑战。智慧校园2.0强调以服务至上的办学理念,推动了教育模式的创新,并对传统人才培养模式产生了重大影响。 智慧校园建设的解决之道是构建一个开放、共享的信息化生态系统,利用互联网思维,打造柔性灵活的基础设施和强大的基础服务能力。这种生态系统支持快速迭代的开发和持续运营交付能力,同时注重用户体验,推动服务创新和管理变革。智慧校园的核心思想是“大平台+微应用+开放生态”,通过解耦、重构和统一运维监控,实现服务复用和深度融合,促进业务的快速迭代和自我演化。 智慧校园的总体框架包括多端协同,即“端”,它强调以人为中心,全面感知和捕获行为数据。这涉及到智能感知设备、超级APP、校园融合门户等,实现一“码”或“脸”通行,提供线上线下服务端的无缝连接。此外,中台战略是智慧校园建设的关键,包括业务中台和数据中台,它们支持教育资源域、教学服务域等多个领域,实现业务的深度融合和数据的全面治理。 在技术层面,智慧校园的建设需要分期进行,逐步解耦应用,优先发展轻量级应用,并逐步覆盖更多业务场景。技术升级路径包括业务数据化、数据业务化、校园设施智联化等,利用IoT/5G等技术实现设备的泛在互联,并通过人工智能与物联网技术的结合,建设智联网。这将有助于实现线上线下一网通办,提升校园安全和学习生活体验,同时支持人才培养改革和后勤管理的精细化。 智慧校园的建设不仅仅是技术的升级,更是对教育模式和管理方式的全面革新。通过构建开放、共享的信息化生态系统,智慧校园能够更好地适应快速变化的教育需求,提供更加个性化和高效的服务,推动教育创新和人才培养的高质量发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林戈的IT生涯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值