最近在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标准库的问题相关推荐

  1. unistd.h linux,Linux 标准库下的unistd.h

    unistd.h在unix中类似于Window中的windows.h! #ifdef WIN32 #include #else #include #endif unistd.h含有的常量与函数: ss ...

  2. linux标准分发版的描述信息,如何查看Linux中系统版本信息

    使用Linux 系统是由时候需要查看当前Linux系统的版本便于进行一些设置或者操作,那么如何在Linux系统中使用命令查看Linux发行版版本信息呢? 在本教程中,我们将向您展示如何使用命令行检查系 ...

  3. 解读Linux标准LSB 3.0

    解读Linux最新标准LSB 3.0 LSB是什么? LSB是Linux Standard Base取首字母的缩写.LSB的目标是制定标准提高Linux系统与其他相似系统的兼容性.LSB标准定义了二进 ...

  4. 关于在linux下出现stdio.h文件不存在等gcc标准库不能找到的解决的方法

    关于在linux下出现stdio.h文件不存在等gcc标准库不能找到的解决的方法 参考文章: (1)关于在linux下出现stdio.h文件不存在等gcc标准库不能找到的解决的方法 (2)https: ...

  5. linux c 设置utc时间,C/C++标准库之转换UTC时间到local本地时间详解

    前言 UTC 时间DateTime.UtcNow 和 系统本地时间 DateTime.Now 相差8个时区 ,美国本地时间和北京时间相差15个时区: 美国,而一般使用UTC时间方便统一各地区时间差异. ...

  6. 【Linux 内核】进程管理 ( 进程特殊形式 | 内核线程 | 用户线程 | C 标准库与 Linux 内核中进程相关概念 | Linux 查看进程命令及输出字段解析 )

    文章目录 一.进程特殊形式 ( 内核线程 | 用户线程 ) 二.C 标准库与 Linux 内核中进程相关概念 三.Linux 查看进程命令及输出字段解析 一.进程特殊形式 ( 内核线程 | 用户线程 ...

  7. python 使用标准库连接linux实现scp和执行命令

    import stat import pexpect 只显示关键代码: sqldb = localpath+database //获取database名字 if os.path.exists(sqld ...

  8. linux eclipse 头文件路径,Eclipse CDT标准库头文件设置

    使用eclipse cdt开发C/C++项目的时候,从eclipse官网下的linux下的专门版本在Fedora上能自动Discovery机器上的gcc/g++头文件.符号之类的,但是在我用的slac ...

  9. linux cpp标准库,标准库以及标准头文件

    源文件通过编译可以生成目标文件(例如 GCC 下的 .o 和 Visual Studio 下的 .obj),并提供一个头文件向外暴露接口,除了保护版权,还可以将散乱的文件打包,便于发布和使用. 实际上 ...

最新文章

  1. 神经网络到底是如何思考的?MIT精英们做了这么一个实验室来搞清楚
  2. 042_CSS3字体
  3. html怎么建立段落,HTML 段落
  4. USB描述符【整理】
  5. 工作193:vue.runtime.esm.js?2b0e:619 [Vue warn]: <transition-group> children must be keyed: <ElTag>
  6. 在windows命令行中查询MySQL乱码
  7. row_number() over 相同日期不同序号_怡丽丝尔护肤品生产日期怎么看?怡丽丝尔护肤品保质期多久?...
  8. 网站运营模式之行业网站分析
  9. Erlang中的RSA签名
  10. 2021年广东省安全员A证第三批(主要负责人)考试内容及广东省安全员A证第三批(主要负责人)新版试题
  11. idea项目启动报错 Failed to parse configuration class [com.epoint.FrameWebApplication]
  12. java file seek_Java RandomAccessFile seek()方法
  13. 什么是 主机地址 、网络地址
  14. 显示断开连接ntp服务器,ntp服务器连接异常咋办
  15. 查看git暂存区有哪些文件
  16. 终端文本编辑神器--Vim命令详解。如何配置使用Vim、Vim插件?
  17. 2020年浙大计算机考研答疑
  18. 打开网页弹出“出现了运行时间错误,是否要调试”的解决办法
  19. vue3.0为什么要用Proxy替代defineProperty
  20. 我的世界java活板门会被烧没_《我的世界》新版1.14的活板门特性改变了?玩家开发出新的玩法!...

热门文章

  1. mac 思科 链路聚合_EtherChannel Cisco 端口聚合详解
  2. Linux命令 —— 输出一组系统信息(uname -a)
  3. 剑指offer 算法 (分解让复杂问题简单)
  4. 2015-2016 Petrozavodsk Winter Training Camp, Nizhny Novgorod SU Contest
  5. 最小割分治(最小割树):BZOJ2229 BZOJ4519
  6. bzoj2806: [Ctsc2012]Cheat
  7. (一) 关于配置travis-ci持续集成python pytest测试的相关记录
  8. Spring Security3.1登陆验证
  9. 控制C++的类只能在堆分配或只能在栈分配
  10. 想当然是编程最大的坑,记更新删除过期cookie无效有感