一个DNS请求引起的网络阻塞
来源:互联网 发布:java中else是什么意思 编辑:程序博客网 时间:2024/04/28 06:01
前段时间遇到Linux应用程序网络丢包问题,应用程序接收网络报文数据丢失界面展示信息不全.以下是对该问题进行基本的简要分析与定位的过程。
在网络转发路径未发现网络传输丢包情况.通过Linux netstat查看gmond应用程序socket状态发现一个奇怪的现象,gmond Recv-Q网络报文数量持续不断增长,且多次查看状态均未出现清零的情况,初步怀疑内核socket接收存在丢包即CPU处理性能瓶颈导致应用程序无法及时接收网络报文。
netstat -lnup输出:
htop查看系统应用进程CPU占用率并未发现CPU满负荷运行情况直接排除CPU处理性能瓶颈导致应用程序无法及时接收网络报文。问题转向了gmond应用程序,如何跟踪应用程序系统调用.那就是strace!
strace命令是一个集诊断、调试、统计与一体的工具,我们可以使用strace对应用的系统调用和信号传递的跟踪结果来对应用进行分析,以达到解决问题或者是了解应用程序工作过程的目的。strace使用方法请参考网上资源.
strace -p 2747 输出,发现gmond应用程序间歇性的执行系统调用如下:
gmond应用程序在进行DNS请求解析,在Linux下常用gethostbyname函数用于域名解析,其内部会对配置DNS服务器进行遍历递归查询直到域名解析请求成功或域名解析请求超时,同时该接口无法设置timeout超时间直接影响应用程序执行效率。
gmond应用程序在进行DNS请求解析,但请求无响应导致间歇性的阻塞等待请求超时,直接导致gmond应用程序接收网络报文异常,解决办法:
1)DNS服务器配置正确网络可达,并设置缺省域名解析即对无法解析域名及时回应DNS解析异常,避免遍历递归查询DNS。
2)在多线程环境避免使用gethostbyname进行域名解析,采用gethostbyname_r网上建议以避免多线程环境采用gethostbyname发生阻塞。
3)对高DNS解析应用程序直接配置本地host直接本地解析提高DNS解析效率。
- 一个DNS请求引起的网络阻塞
- ICMP重定向引起的网络阻塞
- 一个线程阻塞引起的超时问题
- 路由MTU值引起网络短暂阻塞的解决
- vue网络请求加loading引起的小想
- Oracle引起阻塞的情况
- 一个异步dns 请求程序
- Dns变更引起的页面无法访问
- DNS设置引起的登录延迟
- 关于正则引起线程阻塞的问题
- php的sleep(10)引起阻塞
- 阻塞方法引起的任务无法结束
- 调试遗漏IoStartNextPacket引起的阻塞
- iOS网络请求优化之DNS映射
- 一个高并发非阻塞的网络服务器例子
- 通过QEventLoop实现网络请求QNetworkAccesssManager阻塞
- 一个用于网络请求的类
- 网络请求一个蛮好的库
- 单点登录: 从一个页面跳转到zabbix的主页面
- 十二周项目5--迷宫问题之图深度优先遍历解法
- Android Studio将本地HTML加载到WebView
- 服务器端解决跨域问题的三种方法
- 最好的代码开发工具------>IntelliJ IDEA
- 一个DNS请求引起的网络阻塞
- tthinkPHP 3.2.3版本图片验证码的问题解决方法
- svn常见图标问题
- React Native布局详细指南
- ajax表单提交验证,浏览器兼容问题
- Android编辑框EditText需要点击两次触发onclick问题解决
- ecshop php 建设银行 支付接口
- DCT变换
- String - 习题练习