可以看到 低优先级的进程 暂用了比较高的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. 实验四  CSS样式的应用

    实验四  CSS样式的应用 注意:以下实验项目皆以本文件为操作对象,实验结果用记事本保留后预览,最后将添加的CSS代码转载到实验报告中 另本网页中蓝色加下划线的字即为默认的超链接样式 实验目的: 掌握 ...

  2. Prometheus入门教程(二):Prometheus + Grafana实现可视化、告警

    文章首发于[陈树义]公众号,点击跳转到原文:https://mp.weixin.qq.com/s/56S290p4j9KROB5uGRcGkQ Prometheus UI 提供了快速验证 PromQL ...

  3. [leetcode] 剑指 Offer 专题(一)

    又开了一个笔记专题的坑,未来一两周希望能把<剑指Offer>的题目刷完

  4. pytest文档46-关于https请求警告问题(InsecureRequestWarning: Unverified HTTPS request is being made)

    前言 使用 pytest 执行 https 请求用例的时候,控制台会出现警告:InsecureRequestWarning: Unverified HTTPS request is being mad ...

  5. Docker Stack 笔记

    Docker Compose (Docker Stack) image: Specify the image to start the container from. Can either be a ...

  6. 【最短路】CF 938D Buy a Ticket

    题目大意 流行乐队"Flayer"将在\(n\)个城市开演唱会,这\(n\)个城市的人都想去听演唱会,每个城市的票价不同,于是这些人就想是否能去其他城市听演唱会更便宜,但是去其他的 ...

  7. File、Blob、ArrayBuffer等文件类的对象有什么区别和联系

    前言 在前端中处理文件时会经常遇到File.Blob.ArrayBuffer以及相关的处理方法或方式如FileReader.FormData等等这些名词,对于这些常见而又不常见的名词,我相信大多数人对 ...

  8. centOS7 查看防火墙状态 开放端口

    一.防火墙的开启.关闭.禁用命令 (1)设置开机启用防火墙:systemctl enable firewalld.service (2)设置开机禁用防火墙:systemctl disable fire ...

  9. C# 使用MySQL事务的使用方法

    //使用事务来处理多条数据,如果不成功则回滚 public void getCheckListSubmit() { string _conStr = "................&qu ...

  10. LIS初级推算(最长上升子序列问题)

    所谓LIS,就是Longest Increasing Subsequence问题 注意,子序列不一定是连续的,举个例子:对于序列10,9,2,3,5,4,7,9,101,18,其中的LIS就是2,3, ...