- 博客(75)
- 资源 (7)
- 收藏
- 关注

翻译 【译文】使用原子变量和GCC在C/C++中实现引用计数
C语言中,为了实现高性能,多线程编程要使用无锁数据结构(lock-free),引用计数是一种经常被使用的机制。但是,引用计数单打独斗是不行的,必须配合延迟删除机制(原文中的RCU方法),才可以高性能的、线程安全的访问对象。
2021-08-06 13:29:39
1251

原创 linux系统内核UDP丢包原因分析
2016-07-22更新1、UDP校验和错误现象:可以用netstat -su 查看到有UDP错包。tcpdump捕包,在wireshark打开捕获的udp报文,开启校验和选项,若有错包。方案:查找链路故障。2、防火墙开启现象:特定端口的包收不到方案:使用service iptables stop关闭。3、rp_filter开启现象:tcpdump有包,协议栈收
2012-11-22 16:42:19
9907

原创 没有atomic.h后如何在linux实现原子操作
2011-09-06更新需要使用atomic_add_return函数,发现编译时找不到该函数的入口,阅读iatomic.h后发现在I386和X86_64平台下,不支持带有return后缀函数,例如atomic_sub_return,atomic_inc_return等,但支
2010-12-29 12:01:00
21296

原创 在应用程序中替换Linux中Glibc的malloc的四种方法
打算优化系统的内存分配,接管glibc提供的内存管理,但是整个工程的代码量很大,使用malloc、realloc、calloc和free的地方到处都是,如果自己写好的接口需要重命名所有的调用,先不说工作量,部分没有权限查看代码的.a文件就搞不定了。所以需要替换掉系统的malloc,保证原有调用的名称不变。经过尝试,共有四种方法可以替换,各有优缺点吧。方案1 使用环境变量LD_PRELOAD 环境变量LD_PRELOAD指定程序运行时优先加载的动态连接库,这个动态链接库中的符
2010-12-03 12:35:00
23167
原创 处理LetsEncrypt证书签发错误acme-v02.api.letsencrypt.org timeout
处理 HTTPSConnectionPool(host=‘acme-v02.api.letsencrypt.org’, port=443): Read timed out
2022-08-25 11:03:52
6709
原创 gitlab 11.10.4升级至12.3.4碰到的坑
起因:ACME客户端版本过旧导致无法更新Lets Encrypt证书lets encrypt证书的有效期是90天,使用以下两个命令都无法更新证书sudo gitlab-ctl renew-le-certs和sudo gitlab-ctl reconfigure错误提示ACME v1版本已被废弃:Running handlers:There was an error running...
2019-10-07 01:35:05
3834
原创 Thinkpad x1“电源已接通,未充电”解决办法
现象Windows电池管理提示:“电源已接通,未充电” 或 “plugged in but not charging”。修改电源管理计划无效,重启无效。解决办法拔掉电源重启进入BIOS进入 Power menu选择 “Disable built-in battery”等待电脑关机,再等待30秒插上电源,开机实验环境: Thinkpad X1 extrem Windows 1...
2019-04-06 18:19:39
50254
11
原创 解决windows 10更换非系统盘后无法启动问题
现象笔记本电脑里有两块SSD硬盘,Disk 1是系统盘,安装了windows 10,Disk 1是数据盘,要将3为替换为更大容量的物理盘c。Disk 2更换为Disk 3后,BIOS停留在Boot Menu,列出了Disk 1、3,均无法引导。BISO为UEFI引导。原因在有双硬盘的主机上安装windows时,windows会将EFI引导分区存储在非系统盘,即本文中的Disk 2,一旦更...
2019-03-13 15:49:53
8673
1
原创 Latex图表设置中英文双标题(非ccaption宏包)
Latex图表设置中英文双标题(非ccaption宏包)双语言标题的解决方案,搜到的答案基本是ccaption宏包。实际使用时,会编译报错: ! LaTeX Error: Command \captionwidth already defined.查到ccaption是一个古老的宏包,已经被caption宏包所取代。caption宏包中包含bicaption.sty,可以完美解决...
2018-04-27 16:38:27
11183
1
原创 Windows系统 QQ/Print Screen截图黑屏解决方案
百度到的方案不是要改注册表就是关闭显卡加速,不喜欢。 windows7以上版本,可以用系统自带的snipping tool,支持全屏、矩形、活动窗口等截图方式。
2017-11-29 12:02:52
11862
2
原创 【StatsD监控】基于Telegraf+InfluxDB+grafana展示(非Docker方案)
StatsD是一个简单易用的监控方案,由于采用了文本+UDP传输数据,所以对C/C++开发者比较友好。本文介绍了部署Telegraf+InfluxDB+Grafana的方法,以便对StatsD进行可视化。
2017-11-07 22:08:05
3462
原创 Latex Error “Font txsy at 540 not found“
使用windows的CMD工具,执行initexmf --mkmaps另外,该问题也可能导致”citation xxx undefined”错误。 参照 https://tex.stackexchange.com/questions/262962/error-font-ptmr8r-at-480-not-found
2017-05-11 17:11:19
3643
3
原创 多线程/多进程gdb调试时变量值出现变化问题定位
不要考虑什么CPU缓存一致性、内存屏障之类的问题,首先排除是不是多线程/进程访问的同步没做好。 1、会被多线程调用吗? 2、共享内存多进程读写的同步保证了吗?
2017-03-11 11:28:08
1516
原创 网页和URL内非英语字符的编码方法
HTML和URL中对于ASCII码中大于0x7f的字符需要进行编码,主要有”\u”和“&#”两种前缀编码方式,其后跟的字符都是unicode编码。
2016-04-03 18:28:54
1696
原创 系统可用内存不足解决
现象:系统可用内存不足,16GB内存仅剩3GB可用,此时我们的也应用没有起,top查看cached也较小,只能重启应付。 原因:初步判断是内核占用,通过slabtop定位到dentry_cache,使用下面的方法解决: http://www.cnblogs.com/panfeng412/p/drop-caches-under-linux-system.html
2016-03-14 11:51:40
2048
原创 两次访问同一静态URL得到的文件长度不一样
在使用chrome浏览器请求一个媒体服务器上的URL时 ,应答的Content-Length不一致。
2016-01-24 15:30:29
2683
原创 LD_PRELOAD和dlopen选项RTLD_DEEPBIND之间的优先级
标题先说结论:RTLD_DEEPBIND的优先级更高,在符号名发生冲突时,LD_PRELOAD的全局符号介入对于使用RTLD_DEEPBIND标志位dlopen开的动态连接库无效。 发现背景: 在使用《在应用程序中替换Linux中Glibc的malloc的四种方法》一文中第3个方法接管程序内存时发现已接管内存总量比top命令看到的虚拟内存值小很多。于是查看/proc/[pid]/smaps查看虚
2015-12-22 18:15:54
7013
原创 在Windows7环境下使用GIT BASH免输入密码
背景:根据一路向北的教《Windows下TortoiseGit over Putty or Openssh提交项目到GitLab》,安装了TortoiseGit客户端,并完成在Gitlab上公钥的部署。但是有些操作必须通过GITbash命令行才能完成,但每次fetch/push都要输入git@10.0.0.1的密码,非常繁琐。经过各种尝试,终于使用前期通过PuttyGen创建的私钥登录服务器。 第
2015-11-12 17:01:08
3753
转载 C语言函数调用性能测试
原文链接:http://www.cnblogs.com/woshare/p/4720771.html在i5 3.1GHz下:1024字节栈,需要约300纳秒;64字节栈,需要200纳秒。
2015-08-13 15:12:51
3063
转载 Take advantage of TCP/IP options to optimize data transmission
原文地址:http://www.techrepublic.com/article/take-advantage-of-tcp-ip-options-to-optimize-data-transmission/ Streamlining data transmission is a critical challenge for any enterprise. Thankfully, the
2015-04-30 19:53:33
1829
原创 Linux操作系统时间相关函数性能下降原因分析
在排查操作系统升级后应用性能降低过程中,发现同硬件平台下2.6.32内核版本usleep函数产生的开销远大于2.6.18内核上的。 软硬件环境如下主机A主机BCPU Intel E5-2630 24核2.6GHz内存 DDR3 64GBRHEL-6.4(Kernel
2015-03-27 19:27:05
3365
原创 如何分析Linux版本升级后的资源开销增加原因?
起因一个运行十余年的Linux平台应用,最近要从原来的RHEL 5.4(2.6.18)升级到RHEL6.4(2.6.32),以便适应超过32核CPU。在重新编译运行后发现,应用CPU开销从原来的150%增加到500%。通常来说,Linux内核版本升级不会降低原有程序的性能,甚至应该所提升才对。以下是对资源消耗增加其原因进行分析的过程。 一般同一源代码的应用在不同Linux操
2015-03-27 18:18:48
1846
原创 linux自动挂载U盘只读的修复方法
自动挂载的U盘,变成只读了,用root权限修改属性也不可以。推测是U盘的文件系统损坏,操作系统为了防止进一步毁坏文件系统,而将其设置成了只读。解决起来很简单,插到windows系统上,提示U盘损坏,点击修复即可。可能需要时间较长,耐心等待。
2015-03-12 17:54:40
4124
原创 Dwarf Error: wrong version in compilation unit header (is 4, should be 2)
在gcc4.1.2,gdb6.5的环境下竟然出现了这个错误,非常不可思议,因为这两个版本的gcc和gdb是匹配的.尝试按照下面这个方法重新编译也不行。http://blog.youkuaiyun.com/fandroid/article/details/32914203后来发现是源代码中使用了一个静态链接库,这个链接库是在高版本gcc上编译的,链接到可执行程序后导致整个程序都不能gdb,重新编
2015-03-12 17:51:37
5143
原创 使用iconv进行GBK到BIG5编码转/简繁转换遇到的问题
Linux操作系统中的iconv命令/函数可以将一种已知的字符集文件转换成另一种已知的字符集文件。在使用它进行GBK到BIG5的编码转换时,遇到"iconv:illeagal input sequence at positon xx ”的错误。有个一个文本文件gbk.txt,只有四个汉字,内容如下:喜欢德芙使用下面的命令,在shell中进行转换 iconv -f gbk -t
2015-02-27 10:56:02
6849
原创 高效获得Linux函数调用栈/backtrace的方法
有四种方法可以获得Linux的函数调用堆栈,参见CALL STACK TRACE GENERATION。在这里简单罗列一下文中提到的四个方案:方法1 GCC内置函数__builtin_return_address 方法2 Glibc中的backtrace函数 方法3 Jeff Muizelaar实现的增强backtrace,除了函数名,还能获得代码行号 方法4 libunwind这...
2014-12-31 16:16:08
19255
3
原创 一例TCP优雅关闭失败SO_LINGER选项未起作用
通过setsockopt :SO_LINGER 选项可以指定函数close对面向连接的协议如何操作。内核缺省close操作是立即返回,如果有数据残留在套接口缓冲区中则系统将试着将这些数据发送给对方。但是如果close时,接收缓冲区有未接收数据,则操作系统会直接发送RST报文结束链接,也就是说TCP链接不会优雅关闭。所以,如果希望链接被优雅关闭,应在接受完缓冲区内的所有数据后再调用clo
2014-12-31 15:37:24
2121
原创 一例由于栈溢出导致valgrind报告Invalid write的错误
使用Valgrind检查新写好的代码,在调用函数a时,valgrind报告了一系列的Invalid write和Invalid read,警告所在行数就是函数a的定义位置,让人摸不着头脑。而且也不是每次调用a都会告警。不经意间发现在Invalid write之前还有一个SP change的警告,在这个警告的提醒下发现函数a中一个局部变量数组特别大,达到了6MB,加上其它数据超过了栈空间(l
2014-12-04 17:47:56
4529
转载 CALL STACK TRACE GENERATION
转载自http://www.acsu.buffalo.edu/~charngda/backtrace.html(链接已失效)
2014-11-19 13:30:21
4922
转载 C语言printf详解
C中格式字符串printf()的一般形式为: %[标志][输出最小宽度][.精度][长度]类型, 其中方括号[]中的项为可选项。各项的意义介绍如下: 1.类型:表示输出类型的格式字符 格式字符意义a 浮点数、十六进制数字和p-计数法(C99)A
2014-08-26 16:07:20
1529
原创 C语言中switch case的类型比较机制
int func(char i){ switch(i) { case 0x82: return 1; default: return 0; }}int main(){ unsigned char a=0x82; ret=func(a); if(ret==1) { printf("bingo"); } else
2014-08-22 19:10:53
2196
原创 Linux动态链接库同名符号装载问题(二)
上一篇《Linux动态链接库同名符号装载问题(一)》中提到了动态链接的一些问题,本文主要讨论动态加载时符号冲突的问题。PART1:RTLD_DEEPBIND打开动态链接导致段错误的现象可执行程序A通过dlopen动态加载library.so,有可能出现library.so中和这样的情况: 程序A中存在函数search_hash()library.so中同样存在函数search_hash()dl...
2014-07-18 15:57:51
5492
翻译 Linux:如何在connect后获得源端口?
利用0getsockname() and cast the returned sockaddr to sockaddr_in. It then contains the port & IP.getpeername() gets the remote port & IP.To find an unused port, you have to call bind() on different
2014-07-11 19:21:31
1917
WinSetupFromUSB
2011-10-08
libnet-1.1.5.tar.gz
2011-09-22
制作PPT的七种武器
2008-08-28
搜索引擎——原理、技术与系统
2008-08-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人