我爱WP

一些服务器命令

场景:
用Golang写的一个苹果推送服务apns,PHP通过建立socket请求发送要推送的数据给该服务,golang 调用如下逻辑
go push(data)
apns程序由supervisor管理,经过线上运行发现每隔不同的时间就会重新启动一次,查看日志发现 程序报too many open files错误
问题分析:
too many open files表示系统打开的文件(句柄)太多了,新的进程创建时已经不够用了,即资源枯竭。这样会导致程序崩溃。
1.服务器资源间歇性枯竭,初步排查是某个程序问题导致系统端口得不到释放。
因此,我最想知道这个程序到底打开了多少句柄。
通过如下命令查看该进程的情况:
ps -aux|grep apns
得到PID 52235
通过一下命令:
lsof -p 52235
查看该进程所有的数据,可以看到有大量与苹果推送服务器的链接,即使是已经完成推送。
表明程序存在bug,进程与苹果服务器发送数据后没有主动断开。审查代码发现client = new PushClient(xxx)
client.push()后没有调用client.close()关闭链接。
最后完善代码,重新编译mian.go发布linux可执行文件、部署服务器、supervisor 重启apns。连续运行了几个小时了,不再出现重启的问题。问题解决。

未经允许不得转载:我爱WP » 一些服务器命令

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址