可以看到 低优先级的进程 暂用了比较高的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. lua 1.0 源码分析 -- 总结

    读完 lua1.0 的源码感触:1. 把复杂的代码写简单2. pack 的内存回收3. hash 实现简单,但是应该可以改进,看高版本的代码怎么实现4. lua 初始化环境做了什么,就是一组全局变量初 ...

  2. JProfiler 教程 使用说明

    JProfiler    (本文原创转载请注明) 简介 JProfiler是一个重量级的JVM监控工具,提供对JVM精确监控,其中堆遍历.CPU剖析.线程剖析看成定位当前系统瓶颈的得力工具.可以统计压 ...

  3. 多层级makefile

    多层级makefile 当项目变大之后,需要多层级的makefile来编译,每个makefile的具体功能实现参考单源文件目录makefile.然后再在顶层目录写一个总的makefile来实现编译逻辑 ...

  4. python 登陆三次错误退出

    登陆出现三次错误,退出程序 1 #登陆 2 def Login(): 3 a = input() 4 if a == 'Kate': 5 b = input() 6 if b == '666666': ...

  5. RDS 事务型数据库sql

    -- 替换json中数据 select SUBSTRING_INDEX(SUBSTRING_INDEX('[{"channelCode":"MOBIL",&qu ...

  6. 【C语言C++编程入门】——程序结构:构思!

    学习编程语言的最好方法是编写程序.一般来说,初学者编写的第一个程序是一个名为"Hello World"的程序,它简单地将"Hello World"打印到你的电脑 ...

  7. hdu6376 度度熊剪纸条-----01背包

    题目:度度熊有一张纸条和一把剪刀.   纸条上依次写着 N 个数字,数字只可能是 0 或者 1.     度度熊想在纸条上剪 K 刀(每一刀只能剪在数字和数字之间),这样就形成了 K+1 段.   他 ...

  8. 转 RabbitMQ 入门教程(PHP版) 使用rabbitmq-delayed-message-exchange插件实现延迟功能

    延迟任务应用场景 场景一:物联网系统经常会遇到向终端下发命令,如果命令一段时间没有应答,就需要设置成超时. 场景二:订单下单之后30分钟后,如果用户没有付钱,则系统自动取消订单. 场景三:过1分钟给新 ...

  9. visio2016激活 试用版

    输入秘钥: W9WC2-JN9W2-H4CBV-24QR7-M4HB8   可以成功激活成试用版 有效期30天,30天之后需要你正式激活! 经本人使用完全可以激活,欢迎大家使用!   也欢迎大家支持正 ...

  10. laytable 前台删除后加载当前页数据。

    laytable一次性获取数据后,点击删除调用后台删除.返回成功状态后刷新当前页数据. 渲染方法: //渲染表格 function renderingTable(pageIndex, sourceDa ...