linux标准库的问题
最近在ES5的标准库里遇到好几个问题。
一、write写入失败但是返回成功
检查多线程的时候,发现LOG里面打印次数有问题,仔细检查,发现前后的几句LOG只打印出来了前面的1句或2句,但是从后面的LOG来看,这段代码的流畅是没有问题。
write按照说明,原子操作,不缓存直接写入,返回写入长度,返回-1失败。所以在打印LOG的代码里并没有对文件加锁。
于是我写了个小程序,起来10个线程,同时写入一个文件,写了5分钟,结果发现,真正成功写入的不到1/10 ,如果失败,就是1W条左右写入不成功,但是写入失败的返回值既不是-1也不是0,都是成功。
看来只能给redhat包BUG了。
二、在多线程下调用curl下载
开启多线程使用curl的时候,出现curl的堆栈错误,查询了下,es5下是3.0的库,换成4.0的库后,继续堆栈错误,但是堆栈错误和以前不一样了。
自己写了个小程序,起了多个线程调用curl来下载,却一切正常。
于是把堆栈错误时的最后调用搜索了一下,发现果然也有人和我有一样的问题,下面的解答是curl在多线程先进行域名解析会出错。
我前面的测试程序用的全是IP,所有换了域名进行下载后果然出错。
把程序里所有的域名提前做了域名解析,然后再交给curl下载,一切正常。
三、curl的超时设置会取消进程设置的闹钟信号
这个是同事发现的,起了curl的下载后,定时器不运作了,一句一句注释,终于发现是curl的超时设置造成的了。
四、可怕的mysql_ping不退出
程序在运行过程中线程死锁,查看调用堆栈时发现,一个线程在调用mysql_ping无法退出,而这个检查是加了锁的,导致所有线程全部死锁。
至于为什么mysql_ping为什么退不出来,今天研究了一晚上,也没有发现原因。只是有一点,但就是network停掉后,mysql_ping肯定退不出来,至少我等了一个小时,程序也没有从mysql_ping退出来。但是在程序跑的过程中,网络是通的。
以后研究。
续:发现在多线程下,频繁的mysql_ping导致出错或者是mysql_ping不退出,改成mysql_query失败才mysql_ping,结果mysql_query反而出错导致程序退出了。真是够晕。
另:curl似乎在多线程还还是会有一定几率出错,设置CURLOPT_NOSIGNAL为1,情况就好的多了。
转载于:https://blog.51cto.com/xzq2000/1766847
linux标准库的问题相关推荐
- unistd.h linux,Linux 标准库下的unistd.h
unistd.h在unix中类似于Window中的windows.h! #ifdef WIN32 #include #else #include #endif unistd.h含有的常量与函数: ss ...
- linux标准分发版的描述信息,如何查看Linux中系统版本信息
使用Linux 系统是由时候需要查看当前Linux系统的版本便于进行一些设置或者操作,那么如何在Linux系统中使用命令查看Linux发行版版本信息呢? 在本教程中,我们将向您展示如何使用命令行检查系 ...
- 解读Linux标准LSB 3.0
解读Linux最新标准LSB 3.0 LSB是什么? LSB是Linux Standard Base取首字母的缩写.LSB的目标是制定标准提高Linux系统与其他相似系统的兼容性.LSB标准定义了二进 ...
- 关于在linux下出现stdio.h文件不存在等gcc标准库不能找到的解决的方法
关于在linux下出现stdio.h文件不存在等gcc标准库不能找到的解决的方法 参考文章: (1)关于在linux下出现stdio.h文件不存在等gcc标准库不能找到的解决的方法 (2)https: ...
- linux c 设置utc时间,C/C++标准库之转换UTC时间到local本地时间详解
前言 UTC 时间DateTime.UtcNow 和 系统本地时间 DateTime.Now 相差8个时区 ,美国本地时间和北京时间相差15个时区: 美国,而一般使用UTC时间方便统一各地区时间差异. ...
- 【Linux 内核】进程管理 ( 进程特殊形式 | 内核线程 | 用户线程 | C 标准库与 Linux 内核中进程相关概念 | Linux 查看进程命令及输出字段解析 )
文章目录 一.进程特殊形式 ( 内核线程 | 用户线程 ) 二.C 标准库与 Linux 内核中进程相关概念 三.Linux 查看进程命令及输出字段解析 一.进程特殊形式 ( 内核线程 | 用户线程 ...
- python 使用标准库连接linux实现scp和执行命令
import stat import pexpect 只显示关键代码: sqldb = localpath+database //获取database名字 if os.path.exists(sqld ...
- linux eclipse 头文件路径,Eclipse CDT标准库头文件设置
使用eclipse cdt开发C/C++项目的时候,从eclipse官网下的linux下的专门版本在Fedora上能自动Discovery机器上的gcc/g++头文件.符号之类的,但是在我用的slac ...
- linux cpp标准库,标准库以及标准头文件
源文件通过编译可以生成目标文件(例如 GCC 下的 .o 和 Visual Studio 下的 .obj),并提供一个头文件向外暴露接口,除了保护版权,还可以将散乱的文件打包,便于发布和使用. 实际上 ...
最新文章
- 神经网络到底是如何思考的?MIT精英们做了这么一个实验室来搞清楚
- 042_CSS3字体
- html怎么建立段落,HTML 段落
- USB描述符【整理】
- 工作193:vue.runtime.esm.js?2b0e:619 [Vue warn]: <transition-group> children must be keyed: <ElTag>
- 在windows命令行中查询MySQL乱码
- row_number() over 相同日期不同序号_怡丽丝尔护肤品生产日期怎么看?怡丽丝尔护肤品保质期多久?...
- 网站运营模式之行业网站分析
- Erlang中的RSA签名
- 2021年广东省安全员A证第三批(主要负责人)考试内容及广东省安全员A证第三批(主要负责人)新版试题
- idea项目启动报错 Failed to parse configuration class [com.epoint.FrameWebApplication]
- java file seek_Java RandomAccessFile seek()方法
- 什么是 主机地址 、网络地址
- 显示断开连接ntp服务器,ntp服务器连接异常咋办
- 查看git暂存区有哪些文件
- 终端文本编辑神器--Vim命令详解。如何配置使用Vim、Vim插件?
- 2020年浙大计算机考研答疑
- 打开网页弹出“出现了运行时间错误,是否要调试”的解决办法
- vue3.0为什么要用Proxy替代defineProperty
- 我的世界java活板门会被烧没_《我的世界》新版1.14的活板门特性改变了?玩家开发出新的玩法!...
热门文章
- mac 思科 链路聚合_EtherChannel Cisco 端口聚合详解
- Linux命令 —— 输出一组系统信息(uname -a)
- 剑指offer 算法 (分解让复杂问题简单)
- 2015-2016 Petrozavodsk Winter Training Camp, Nizhny Novgorod SU Contest
- 最小割分治(最小割树):BZOJ2229 BZOJ4519
- bzoj2806: [Ctsc2012]Cheat
- (一) 关于配置travis-ci持续集成python pytest测试的相关记录
- Spring Security3.1登陆验证
- 控制C++的类只能在堆分配或只能在栈分配
- 想当然是编程最大的坑,记更新删除过期cookie无效有感