一、遇到的问题

1、问题:本应该是3个ffmpeg ,但是怎么会有5个ffmpeg出现?

2、Lua脚本问题,一直写入日志,导致有大量的日志,这里的错误日志是直接写进nginx的error.log 日志文件的

(1)日志文件

total .8G
-rw-r--r-- 1 root root 11M May 9 21:47 access.log
-rw-r--r-- 1 root root 3.1K May 9 21:46 error.log
-rw-r--r-- 1 root root 705M May 9 21:44 live_access.log
-rw-r--r-- 1 root root 1.1G May 9 21:44 nginx_error.log

2017/05/09 21:43:05 时间段详细记录:

// :: [notice] #: * "\.m3u8" does not match "
// :: [notice] #: * "\.m3u8" does not match "
// :: [notice] #: * "\.m3u8" matches "/live/C
// :: [notice] #: * "\.m3u8" matches "/live/C
// :: [notice] #: * "\.m3u8" does not match "
// :: [notice] #: * "\.m3u8" does not match "
// :: [notice] #: * "\.m3u8" does not match "
// :: [notice] #: * "\.m3u8" does not match "
// :: [notice] #: * "\.m3u8" matches "/live/C
// :: [notice] #: * "\.m3u8" does not match "
// :: [notice] #: * "\.m3u8" does not match "
// :: [notice] #: * "\.m3u8" does not match "
// :: [notice] #: * "\.m3u8" does not match "
// :: [notice] #: * "\.m3u8" does not match "
// :: [notice] #: * "\.m3u8" does not match "
// :: [notice] #: * "\.m3u8" does not match "
// :: [notice] #: * "\.m3u8" matches "/live/C
// :: [notice] #: * "\.m3u8" does not match "
// :: [notice] #: * "\.m3u8" does not match "
// :: [notice] #: * "\.m3u8" does not match "
// :: [notice] #: * "\.m3u8" does not match "
// :: [notice] #: * "\.m3u8" does not match "
// :: [notice] #: * "\.m3u8" does not match "
// :: [notice] #: * "\.m3u8" matches "/live/C
// :: [notice] #: * "\.m3u8" does not match "
// :: [notice] #: * "\.m3u8" does not match "
// :: [notice] #: * "\.m3u8" does not match "
// :: [notice] #: * "\.m3u8" matches "/live/C
// :: [notice] #: * "\.m3u8" does not match "
// :: [notice] #: * "\.m3u8" matches "/live/C
// :: [notice] #: * "\.m3u8" matches "/live/C
// :: [notice] #: * "\.m3u8" does not match "
// :: [notice] #: * "\.m3u8" does not match "
// :: [notice] #: * "\.m3u8" does not match "
// :: [notice] #: * "\.m3u8" matches "/live/C
// :: [notice] #: * "\.m3u8" does not match "
// :: [notice] #: * "\.m3u8" does not match "
// :: [notice] #: * "\.m3u8" does not match "
// :: [notice] #: * "\.m3u8" matches "/live/C
// :: [notice] #: * "\.m3u8" matches "/live/C
// :: [notice] #: * "\.m3u8" does not match "
// :: [notice] #: * "\.m3u8" does not match "
// :: [notice] #: * "\.m3u8" does not match "
// :: [notice] #: * "\.m3u8" does not match "
// :: [notice] #: * "\.m3u8" does not match "

2017/05/09 21:36:43 时间段详细记录,太恐怖了,1s写入日志多大240条,难怪nginx的负载飙到54%

// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [info] #: * client pre
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [info] #: * client
// :: [info] #: * client
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"
// :: [notice] #: * "\.m3u8"
// :: [error] #: * [lua] hls
// :: [notice] #: * "\.m3u8"

(2)Lua脚本日志写入:

if ( tonumber(res) ==  or tonumber(res) ==  ) then          -- 不是签名验证,则直接返回
ngx.log(ngx.ERR, "error : 不是签名验证,则直接返回::res=== ",res)
return
end

解决办法:立即关闭该日志的写入,重启nginx服务器 reload

【1】日志切割工具下载:http://soft.laozuo.org/tools/Knife4File.zip

【2】log日志查看工具:http://www.uvviewsoft.com/logviewer/files/LogViewerPro.zip

3、他们摄像头推流,直播结束后ffmpeg 进程一直在

4、是否针对播流权限认真是否取消掉?

答:暂时先取消掉

6、流状态列表查看(必须的联系他们的人员怎么处理),没有推流但是nginx服务状态一直存在

 解决方案:

修改nginx rtmp配置参数,添加这个参数:drop_idle_publisher 10s;

drop_idle_publisher
语法:drop_idle_publisher timeout
上下文:rtmp, server, application
描述:终止指定时间内闲置(没有音频/视频数据)的发布连接。默认为 off。注意这个仅仅对于发布模式的连接起作用(发送 publish 命令之后)。
 
二、性能优化技巧
1、设置worker_connections:10240

官方解释如下,个人认为是每一个worker进程能并发处理(发起)的最大连接数(包含所有连接数)。不能超过最大文件打开数:在linux终端中输入ulimit -a进行查看

www@ubuntu5:$ ulimit -a
core file size (blocks, -c)
data seg size (kbytes, -d) unlimited
scheduling priority (-e)
file size (blocks, -f) unlimited
pending signals (-i)
max locked memory (kbytes, -l)
max memory size (kbytes, -m) unlimited
open files (-n)
pipe size ( bytes, -p)
POSIX message queues (bytes, -q)
real-time priority (-r)
stack size (kbytes, -s)
cpu time (seconds, -t) unlimited
max user processes (-u) 126277
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited

参考:linux ulimit命令调优系统参数

 2、编译安装过程优化
 

找到源码的这个文件 /nginx-1.10.3/auto/cc/gcc

# debug
CFLAGS="$CFLAGS -g"

不修改代码大小7.3M:

tinywan@tinywan:~/nginx-1.10./auto/cc$ ls -lh /usr/local/nginx/sbin/nginx
-rwxr-xr-x root root 7.3M 3月 : /usr/local/nginx/sbin/nginx

修改后的文件大小759K

tinywan@tinywan:~/nginx-1.10.$ ls -lh /usr/local/nginx/sbin/nginx
-rwxr-xr-x root root 759K 5月 : /usr/local/nginx/sbin/nginx

查看CPU类型

tinywan@tinywan:~/nginx-1.10.$ cat /proc/cpuinfo | grep "model name"
model name : Intel(R) Core(TM) i3- CPU @ .60GHz
 
 
 Nginx日志分割及自动删除超过30天日志

#!/bin/bash
# 分割nginx access日志脚本 time=`date +%Y%m%d`
logs_path="/usr/local/nginx/logs/"
pid_path="/usr/local/nginx/logs/nginx.pid" #日志分割,按天创建文件夹
cd $logs_path
website=`ls $logs_path/access_* | xargs -n | cut -f -d "_"`
for i in $website
do
mkdir -p $logs_path/backup/$time/
mv $logs_path/access_$i $logs_path/backup/$time/$i
done
#向nginx主进程发信号重新打开日志
kill -USR1 `cat ${pid_path}` #每月1日删除所有超过30天日志。
if [ "`date +%d`" = "" ]; then
all_list=`ls $logs_path/backup | xargs -n `
for del in $all_list
do
let results=$time-$del
if [ $results -gt ]; then
rm -rf $logs_path/backup/$del
fi
done
fi

注: /usr/local/nginx/logs/下的日志格式为access_domain1.log。

加入计划任务,每天大概0时分割日志:

  * * * /data/script/nginx_logs.sh
 
 
 
 
 
 

Nginx 服务器性能Bug和性能优化方案(真实经历)的更多相关文章

  1. 大型php网站性能和并发访问优化方案(转载自php中文网)

               网站性能优化对于大型网站来说非常重要,一个网站的访问打开速度影响着用户体验度,网站访问速度慢会造成高跳出率,小网站很好解决,那对于大型网站由于栏目多,图片和图像都比较庞大,那该怎 ...

  2. 大型php网站性能和并发访问优化方案

    网站性能优化对于大型网站来说非常重要,一个网站的访问打开速度影响着用户体验度,网站访问速度慢会造成高跳出率,小网站很好解决,那对于大型网站由于栏目多,图片和图像都比较庞大,那该怎么进行整体性能优化呢? ...

  3. Nginx 之三:nginx服务器模块、web请求处理机制及事件驱动模型、进程功能和进程间通信

    一:Nginx的模块化结构设计: 1.核心模块:指的是nginx服务器运行当中必不可少的模块,这些模块提供了最基本最核心的服务,比如权限控制.进程管理.错误日志.事件驱动.正则表达式解析等,nginx ...

  4. nginx 服务器篇

    Nginx 服务器类型 1. Web服务器 Web服务器用于提供HTTP(包括HTTPS)的访问,例如Nginx.Apache.IIS等. 2. 应用程序服务器 应用程序服务器能够用于应用程序的运行, ...

  5. [转载20131024]Nginx服务器漏洞的利用和修复方法

    本文主要分为两大部分,第一部分介绍了Nginx的一些常见安全漏洞的形成原因.利用方法,并给出了相应的解决办法;第二部分介绍了Nginx安全加固时需要关注的主要内容. Nginx(发音同engine x ...

  6. [记录]NGINX配置HTTPS性能优化方案一则

    NGINX配置HTTPS性能优化方案一则: 1)HSTS的合理使用 2)会话恢复的合理使用 3)Ocsp stapling的合理使用 4)TLS协议的合理配置 5)False Start的合理使用 6 ...

  7. vue-小爱ADMIN系列文章(二):微信微博等分享,国际化,前端性能优化,nginx服务器部署

    最近在做我的小爱ADMIN后台管理系统,结合当前市场后台管理系统对相关功能的需求,我又开始新增了一些新的功能和组件,如分享功能组件,项目国际化功能:项目完成后,部署在nginx服务器,发现首次访问的速 ...

  8. Nginx的性能优化方案

    nginx的优化 . gzip压缩优化 . expires缓存有还 . 网络IO事件模型优化 . 隐藏软件名称和版本号 . 防盗链优化 . 禁止恶意域名解析 . 禁止通过IP地址访问网站 . HTTP ...

  9. Nginx服务器性能优化与安全配置实践指南

    转载自:https://www.bilibili.com/read/cv16151784?spm_id_from=333.999.0.0 1.引言 1.1 目的 为了更好的指导部署与测试艺术升系统ng ...

随机推荐

  1. 解决SSH登录用户执行的命令部分环境变量参数不生效的问题

    问题概况 linux机器在/etc/profile配置完成环境变量后,SSH到目标机器执行命令,但是获取不到已配置的环境变量值. 例如场景: 在/etc/profile配置了http代理 export ...

  2. Shell 基础 -- 总结几种括号、引号的用法

    Shell 脚本中经常需要用到一些括号.引号表达式,功能各不相同,本文详细介绍一下. 1.双引号 " " 双引号常用于包含一组字符串,在双引号中,除了 "$". ...

  3. docker 安装 kali

    1.安装 docker pull kalilinux/kali-linux-docker 2.运行容器 docker run -t -i kalilinux/kali-linux-docker /bi ...

  4. error: Build input file cannot be found: '*******/node_modules/react-native/Libraries/WebSocket/libfishhook.a' 问题解决记录

    解决了刚才的'config.h' file not found问题,本以为就可以顺畅的跑起来,谁知道又被恶心到了,Build input file cannot be found!!! 问题: err ...

  5. ES6实用新特性

    兼容性 http://kangax.github.io/compat-table/es5/ http://kangax.github.io/compat-table/es6/ ES6(ES2015)兼 ...

  6. 浅谈FPGA

    浅谈FPGA 前言 生活中永远都不会缺少「 为什么 」,于最近就被合胜学长了,问了一个看似简单却又极具意义的问题,为什么需要FPGA?FPGA与单片机的区别是什么?瞬间刷新了我入门三天FPGA的冲击感 ...

  7. jenkins配置过程中踩过的一些坑

    1,编译通过之后,想要将编译好的war包放到远程服务器上,并解压 unzipBus.sh的脚本如下: #!/bin/bash jar -xvf bus.war 编译后报错:jar:Command no ...

  8. 微信小程序简易table组件实现

    前提:微信小程序自1.6.3基础库版本库开始支持简洁组件,之前的版本因不支持,故在引用组件处默认为空节点.关于微信小程序已有模板为何还需构建组件?一是因为组件可以更方便的自定义并绑定行为,二是在其他页 ...

  9. Jenkins配置匿名用户拥有只读权限

    场景:查看cucumber reporting测试报告时需要登陆,比较麻烦 解决:允许匿名用户拥有只读权限 操作:Jenkins->系统管理->全局安全配置->授权策略,勾选“All ...

  10. CUDA ---- 线程配置

    前言 线程的组织形式对程序的性能影响是至关重要的,本篇博文主要以下面一种情况来介绍线程组织形式: 2D grid 2D block 线程索引 矩阵在memory中是row-major线性存储的: 在k ...