可以看到 低优先级的进程 暂用了比较高的CPU时间。

top 命令中可以看到 NI 为19, 其优先级最低 但是使用cpu 最高。

说明这个进程需要经行优化了,

通过gdb 发现此进程一直都在处理报文,写缓存。

由于使用了dpdk, 此进程用来接收dpdk的报文数据解析。此时流量大约3-5g。

报文量多。此处逻辑 需要调整。以及进程优先级也需要调整

顺便说一说 http server端的优化

  • TCP的keepalive

    维护与client的防火墙的活跃网络包
    检测实际断掉的连接

    net.ipv4.tcp_keepalive_time=7200 发送心跳周期

    net.ipv4.tcp_keepalive_intvl=75 探测包发送间隔
    net.ipv4.tcp_keepalive_probes=9 探测包重试次数

  • 减少关闭连接的timewait
  1.   fin_wait1状态

    net.ipv4.tcp_orphan_retries=0 发送FIN报文的重试次数,0相当于8

  1.   fin_wait2状态

    net.ipv4.tcp_fin_timeout=60 保持在FIN_WAIT_2的状态时间

  1. time_wait状态

    net.ipv4.tcp_tw_reuse=1 开启后client端仍可以使用处于TIME_WAIT的端口,由于时间戳的存在,操作系统可以设置net.ipv4.tcp_timestamps=1拒绝迟到的报文

    net.ipv4.tcp_max_tw_buckets TIME_WAIT的连接数量
    net.ipv4.tcp_tw_recycle=0 开启后client和server都可以使用TIME_WAIT的端口,无法避免报文延迟和重复造成的混乱

lingering延迟关闭TCP连接

当server主动关闭连接的时候,调用close状态,当client仍发送数据到缓冲区,服务仍会给client发送RST包关闭连接,导致了client收到了RST而忽略了http的response

server端的配置

lingering_close off为关闭,on为由server判断是否使用 
lingering_time 30s 功能启用时,最长的读取用户内容的时长,到达后立刻关闭
lingering_timeout 5s 检测client是否仍有请求内容到达,若超时后扔没有数据到达,则立刻关闭连接
读写超时通过RST立刻释放连接,代替四次握手

  • 应用层协议优化

TLS和SSL握手优化的ssl_session_cache off

off为不使用,http server告诉client不使用
none为不使用
builtin为使用,当一个client两次连接都命中一个worker才生效
shared:name:size为使用,定义共享内存
Ticket会话验证票证

http server 会将会话的session作为ticket加密发送给client,client下次发起TLS连接的带上ticket,由nginx解密验证恢复会话,但是这样破换了nginx的TSL/SSL的安全机制,有安全风险,需要经常更换

  • HTTP长连接

可以减少握手次数,减少并发连接消耗服务器资源,降低TCP拥塞控制

  • 压缩包体

google pertools分析nginx

gpertools

  • 文本展示 pprof --text
  • 图形展示 pprof --pdf 需要依赖graphviz和libunwind

文本结果

2 0.9% 51.3% 166 73.5% ngx_epoll_process_event
1 0.4% 96.5% 2 0.9% ngx_open_and_stat_file

每统计周期为10ms

  • 当前函数执行总共花费的统计周期
  • 当前函数执行时间的百分比
  • 当前函数及其之前函数执行时间的百分比
  • 当前函数及其所调用函数消耗的统计周期总和
  • 当前函数及其所调用函数执行时间总和的百分比
  • 函数名

stub_status模块监控

  • Active connections 当前client与Nginx间的TCP连接数,等于Reading+Writing+Waiting
  • accept 从nginx启动,与client建立的连接数
  • handler 从nginx启动,处理过的client连接数,如果没有超出worker_connections,应该是与accept相同
  • requests 从nginx启动,处理过的client请求数,由于keepalive,所以会大于handler
  • Reading 正在读取HTTP请求头的连接总数,接收完Reading就是Writing状态了
  • Writing 正在向Client发送响应的连接总数
  • Waiting 当前空闲的keepalive数量

nice-ni 耗光cpu的更多相关文章

  1. Linux 用 ps 與 top 指令找出最耗費 CPU 與記憶體資源的程式最占cpu的进程

    Linux 用 ps 與 top 指令找出最耗費 CPU 與記憶體資源的程式 2016/12/220 Comments  ######### ps -eo pid,ppid,%mem,%cpu,cmd ...

  2. Windows Server 2008 R2 服务器内存使用率过高几乎耗光

    系统环境: Windows Server 2008 R2 Enterprise 搭建有 web服务器(iis) 和  文件服务   问题描述: Windows Server 2008 R2系统内存耗光 ...

  3. gitlab访问慢,出现502,特别卡,耗内存cpu解决办法

    前言 浏览器访问gitlab的web页面,发现非常慢,并且很容易出现502问题.其中一个原因就是8080端口被tomcat占用,前面一篇已经更换了端口,但还是很慢.后来搜了下,原因是gitlab占用内 ...

  4. composer安装包的时候触发PHP fatal error,提示允许的内存耗光

    在composer require之前加COMPOSER_MEMORY_LIMIT=-1

  5. 2、每日复习点--ConcurrentHashMap vs HashMap vs LinkedHashMap vs HashTable

    HashMap: 查询和插入速度极快,但是线程不安全,在多线程情况下在扩容的情况下可能会形成闭环链路,耗光cpu资源. LinkedHashMap: 基本和HashMap实现类似,多了一个链表来维护元 ...

  6. while 1要小心

    之前判断一个接口的返回,一定约定好了是返回retcode 1或者retcode 0,就用的这个判断,但是接口挂了的时候,一直返回未登录,找了很长时间为什么cpu一直消耗那么高. 使用wihle 1时候 ...

  7. [转]如何根据cpu的processor数来确定程序的并发线程数量

    原文:http://blog.csdn.net/kirayuan/article/details/6321967 我们可以在cat 里面发现processor数量,这里的processor可以理解为逻 ...

  8. [进程管理]Load和CPU利用率是如何算出来的

    本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明 网址: http://www.penglixun.com/tech/system/how_to_ca ...

  9. 线程池大小设置,CPU的核心数、线程数的关系和区别,同步与堵塞完全是两码事

    线程池应该设置多少线程合适,怎么样估算出来.最近接触到一些相关资料,现作如下总结. 最开始接触线程池的时候,没有想到就仅仅是设置一个线程池的大小居然还有这么多的学问,汗颜啊. 首先,需要考虑到线程池所 ...

随机推荐

  1. sessionFactory' defined in class path /mappingDirectoryLocations配置问题

    问题:配置好aplicationContext.xml,启动tomcat 出现如下问题 sessionFactory无法正常建立 Context initialization failed org.s ...

  2. IIdea使用CXF开发WebService

    写这篇文章主要是用于增强记忆,而我参考的是这位朋友的随笔,链接如下 http://www.xiaomager.com/415.html 服务端开发过程 1.首先创建一个maven项目,如下图 2.添加 ...

  3. Get提交方式中文乱码

    Get提交方式中文乱码 今天在servlet使用中,在Get方法中获取提交的中文参数,发现是乱码,我用的是Tomcat7. 在Tomcat9中: get方式的参数是放在请求头中,而Tomcat9对请求 ...

  4. 理解Go协程与并发(转)

    理解Go协程与并发   协程 Go语言里创建一个协程很简单,使用go关键字就可以让一个普通方法协程化: Copy package main import ( "fmt" " ...

  5. 洛谷 P6419 Kamp 题解

    明天就SX AFO了交篇题解%一下 这题大概是我第一道有独立思考切掉的紫题 之前的都是各种抄借鉴题解 为什么写这题的题解呢?另一个重要的原因是这样的↓ 翻了翻已有题解中的几篇,下面几种情况屡见不鲜 样 ...

  6. MySQL备份和恢复[3]-mysqldump备份工具

    mysqldump 概述 逻辑备份工具: mysqldump, mydumper, phpMyAdmin Schema和数据存储在一起.巨大的SQL语句.单个巨大的备份文件 mysqldump:是My ...

  7. Spring之IOC/DI(反转控制/依赖注入)_入门Demo

    在平时的java应用开发中,我们要实现某一个功能或者说是完成某个业务逻辑时至少需要两个或以上的对象来协作完成,在没有使用Spring的时候,每个对象在需要使用他的合作对象时,自己均要使用像new ob ...

  8. oVirt4.4虚拟机备份方法

    红帽oVirt于今年推出了oVirt 4.4,该版本在系统.存储.网络.用户界面等方面做出增强功能与优化更新,为oVirt用户提供功能更强大.更灵活的IT基础架构.云祺科技也于最近发布了全新版本云祺容 ...

  9. Windows搭建Hexo系统

    date: 2018-11-16 17:10:51 updated: 2018-11-16 20:04:43 1.安装Git 下载Windows下的Git客户端并安装,安装很简单,基本一路Next下去 ...

  10. C#连接Access

    连接数据库 string oleCon = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " + Application.Sta ...