自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

lotluck的专栏

怀着不能所以的曾经,恨自己当初的无能为力

  • 博客(232)
  • 资源 (2)
  • 收藏
  • 关注

原创 记录一次采坑--如何处理Linux动态库同名函数?

一、背景介绍需求描述:业务提供一个鉴权的静态库,我只需要从url 和 参数中提取相应的参数传给业务的静态库,将静态库的处理结果直接返回给业务(return < 0, 直接返回403)。但是最近业务反馈,请求部分url直接返回Error:-1015错误,不符合预期。二、分析过程业务刚开始反馈问题,我的第一反应:怎么可能是我的问题,我就仅仅写了一个so(暂时命名1.so),直接调用了你...

2019-07-26 20:40:55 1887

原创 mmap其实并没有那么好

现网问题关于mmap的基本操作自行google去吧, 一抓一大把,99%基本上夸mmap是有多好多快,mmap快是因为建立了页到用户进程的虚拟空间映射,以读取文件为例,避免了页从内核态拷贝到用户态, 少了一次拷贝,而且在内存中操作,从这个层面看,mmap是屌屌的。但是在现网使用, mmap带来很多问题。 图一: 内存吃紧,swap也是关闭, 该进程使用内存状况 图二: 该进程 mm...

2018-08-13 16:18:39 17779 2

原创 FLV格式解析及其解析器的实现

一、FLV基础入门最近在搞flv解析器,网站看到一些比较好的基础入门资料,直接搬过来了 FLV文件格式详解 FLV文件格式解析 FLV封装原理 flv文件元信息(metadata) FLV文件结构解析其实看这么多资料还不如下载一个flv解析器(flvparse)直接看里面的格式,heard、tag应有尽有,一目了然 二、FLV解析器实现在对flv格式清楚的基础上,就...

2018-02-26 10:57:56 2377 2

原创 长期更新琐碎易忘知识点。。。。。

这篇文章主要是记录一些常用的小技巧, 日积月累, 用的时候直接粘贴复制即可。 . 在C语言中对于小函数的宏定义是非常好的,因为好用,也可以屏蔽类型#include #define Swap(a,b) {a = a ^ b; \ b = a ^ b; \a = a ^ b; \} #define averge(a,b) ((a&b)+((a^b)>>1)i nt main() { int a = 4,b = 3; Swap(a,b); 在写简单的动态数组的时候,开辟的内存需要是32的整数倍

2016-09-13 16:17:52 570

原创 关于setsockopt的SO_SNDLOWAT低潮发送

先从sendfile说起吧,sendfile其实就是大家口中说的“零拷贝”,在服务器传输大文件方面具有卓越的性能,究其无非主要原因两点: 1. 减少CPU的使用 2. 减少系统调用和数据拷贝的次数。这方面的资料很多,大家网上可以自行搜索。在测试sendfile的小IO问题的时候,意外需要设置setsockopt的SO_SNDLOWAT字段,SO_SNDLOWAT是一个发送低潮字段,根据网上的解释,设置该字段可以当缓冲区有多少剩余空间的时候才被触发调用。那样岂不是很爽,那调用sendfile的

2015-04-01 21:00:46 2918

原创 CDN问题排查:劫持下tcp三次握手分析

一、问题直观感受就是curl 好像卡住了,一直不通。 但是ping, telnet正常,大概率被劫持了,客户端和服务端抓包即可二、分析1.服务端抓包tcpdump -i any port 80 and host 1.1.1.1 -w 6.cap2.客户端抓包从抓包可以得出, 客户端 和 服务端 三次握手成功了,客户端发起get请求,在客户端看来服务端没有响应。客户端觉得是不是三次握手的ack消息难道我没发成功? 客户端就退回到三次握手阶段,连续给服务端发送三次握手的ack消息。 从抓包

2020-08-21 19:56:32 427

原创 高CPU问题----eth0: NIC Link is Down网卡故障导致高CPU

一、 现象: cpu异常飙升(这台机器的eth0网卡在2018年12月的时候就出现问题)二、分析发现:1. dmesg [Thu Mar 14 01:02:00 2019] ixgbe 0000:02:00.0 eth0: NIC Link is Down [Thu Mar 14 01:02:04 2019] ixgbe 0000:02:00.0 eth0: NIC Lin...

2019-03-23 16:04:57 15441 1

原创 Linux创造固定的文件大小-预分配磁盘空间

一、课前预习写本篇文章的目的很简单,防止采坑、防止采坑、防止采坑我们在开发程序的过程中,往往需要预分配磁盘空间,防止因磁盘空间不够而引发程序异常问题(已踩过坑), 现网查阅资料,有些预分配磁盘空间的方法不正确,在这里特别记录一下, 除此之外,把正确的预分配的方法和大家分享一下,如果其他人有建议,欢迎拍砖狠砸二、假:磁盘预分配—ftruncate1. 使用lseek、ftruncate到一个...

2018-10-25 16:05:04 4804 2

转载 我把Linux系统上面误删的数据找回来了

我把Linux系统上面误删的数据找回来了 一、背景突发事件,应用上传的数据被程序自动删掉了,可悲的是还没有数据备份,数据是放在系统的 /data/webapps/xxxx/upload 目录下面,可把我们急坏了,之前又没有做过数据恢复的测试,然后我找到了一款数据恢复的软件,成功把删除的大部分数据找回来了,我的数据恢复过程如下。二、安装恢复软件1、epel 仓库安装...

2018-04-12 14:58:36 1100

翻译 Latency numbers every programmer should know

Latency numbers every programmer should knowLatency numbers every programmer should knowL1 cache reference ......................... 0.5 nsBranch mispredict ............................ 5 nsL2 c...

2018-04-12 11:01:14 607

原创 tcpdump提取源IP

需求: 使用tcpcopy复制现网到测试机器,但是测试机器并不知道导入流量的OC机器IP是多少 查询tcpdump的参数,然而并没有参数可以直接提取源IP。于是采用了比较土的办法,按部就班的提取tcpdump抓包过滤出源IPtcpdump -i eth0 port 36524 -nn -c 5000 2&gt;/dev/null | awk '{print $3}' | awk -F '....

2018-04-08 15:12:37 7902

原创 tcpdump只抓取HTTP报文头部

因为要做一个需求,我需要调研现网请求http头部的大小,都有什么字段,shell脚本代码如下所示#! /bin/bashs_512=0s_512_1k=0s_1k_2k=0s_2k_4k=0s_4k_8k=0s_8k=0idx=0while truedo if (($idx &gt;= 10000));then break fi ...

2018-04-02 23:39:21 9409

原创 简单计算磁盘平均IO

如果有多个磁盘, 计算的时候就需要计算平均值,显然直接利用linux的iostat的命令不能完成这个需求,下面是个简单的计算磁盘相关平均指标的脚本#! /bin/bash#iostat -x 1 2 &gt; 1.txt#sed -i '1,22'd 1.txt# $1 is file namefile_name=$1grep -E "(sd)[b-m]" $file_...

2018-04-02 14:33:10 1610

原创 采坑 uint32_t 和 uint64_t

uint32_t 和 uint64_t 混用,超出uint32_t的范围,结果导致计算错误。。。#define INNER_TANK_NODE_INFO_LEN 8192sata_node_info_num_ = chunk_num_ + big_chunk_num_;chunk_base_addr_size_ = sata_node_info_num_ * INNER_TANK_NODE

2018-01-22 17:08:51 2821

原创 清理cache sync && drop_caches

问题描述在linux上用iostat观察磁盘的时候,发现sda周期性的出现毛刺最后调查原因发现是因为cache的原因,linux会集中写入sda,导致毛刺\color{red}{因为cache的原因,linux 会集中写入sda,导致毛刺}解决办法周期性的执行下面两个命令,让日志不集中写入sda就可以,时间自己把握[root@ying ]# sync[root@ying

2018-01-17 16:54:37 1369

原创 linux pmap

pmap查看某个进程的内存使用情况最核心就是最后一句: mapped:23344Kwriteable/private:1280Kshared:4K\color{red}{mapped: 23344K writeable/private: 1280K shared: 4K}mapped表示该进程映射的虚拟地址空间大小,也就是该进程预先分配的虚拟内存大小,即ps出的vsz\col

2018-01-17 11:29:24 416

原创 Transfer-Encoding 和Content-Encoding

Transfer-Encoding: chunked分块编码,对应Content-Length计算实体长度。 有的时候服务器发送的数据并没有具体的长度,这是时候就需要chunked分块编码 Content-Encoding:gzip 内容编码, 很多网站都使用了gzip压缩,这样使传输的数据量减少了3/4,但是一般图片不建议压缩,因为图片都是压缩过的Content-Encoding 和 Trans

2017-12-26 21:28:20 2144

原创 字符数组md5[4]转换成uint32_t的无符号整数转化?

一个unsigned char md5[4]数组转成uint32_t的无符号整数转化其实也很简单,只要清楚内存的分布结构就没有问题linux内存是由高地址到低地址的,对于md5[4]和int a的分布就是这样子的,md5数组占用4个字节,int也占用4个字节,char数组转成int数组的时候,就是从char数组的末尾开始的,一张图看懂看不懂就看造化了#include <stdint.h>int ma

2017-12-25 16:50:41 3085

原创 软件开发流程

一、需求           1.1 需求的定义                 简单而言需求就是完成相应的功能            1.2 需求的评估                 一般而言,当被提出有需求的时候,应该认真评估分析一下需求到底能不能做,很多需求都含有暗坑,评估不好,后面的事情就非常麻烦。为了不让自己麻烦,对于评估后认为不合理的需求,应该及时的砍掉。对于合理的需

2017-12-18 13:03:08 266

转载 ofstream和ifstream详细用法

ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间;在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符:1、插入器(<<)  向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout<<"Write Stdout"<<'\n';就表示把字符串"Write Stdout"和换行字符('\n')输出到标准输出流。2、析取器(>>) 

2017-12-14 16:01:10 335

原创 内嵌汇编 - cmpxchgl 指令学习笔记

一、背景又是关于汇编,头真是大,当年欠吴旭老师的汇编终究还是要还的。 在看nws源码的时候,里面有这样一段代码static __inline__ unsigned long atomic_cmp_set(volatile void *ptr, unsigned long old, unsigned long set){ unsigned l

2017-12-13 16:35:14 4795

原创 overflow in implicit constant conversion

被女朋友问了一个很简单的问题,刚开始还以为是编译器的锅么,根本是非法吗? 但是非法之后的运行结果呢?当时竟然没有想懂,亲自操刀尝试了下, 下面意思应该很明确了

2017-11-14 21:42:24 4554

原创 HTTP中的Range: bytes=0-

HTTP中的Range就是分段请求字节数,也是大家经常说的断点续传。Range头域可以请求实体的一个或者多个子范围,Range的值为0表示第一个字节,也就是Range计算字节数是从0开始的表示第二个500字节:bytes=500-999表示最后500个字节:bytes=-500表示500字节以后的范围:bytes=500-第一个和最后一个字节:bytes=0-0,-1同时指定几个范围:byt

2017-11-09 10:13:07 10295

转载 两种常用的编程模型

并发系统可以采用多种并发编程模型来实现。并发模型指定了系统中的线程如何通过协作来完成分配给它们的作业。不同的并发模型采用不同的方式拆分作业,同时线程间的协作和交互方式也不相同。这篇并发模型教程将会较深入地介绍目前(2015年,本文撰写时间)比较流行的几种并发模型。并发模型与分布式系统之间的相似性本文所描述的并发模型类似于分布式系统中使用的很多体系结构。在并发系统中线程之间可以相互通信。在分布式系统中进程之间也可以相互通信(进程有可能在不同的机器中)。线程和进程之间具有很多相似的特性。这也就是为什么很多并发模

2017-11-08 22:33:02 4431

原创 新增加的HTTP状态码 -- 103

IETF公布了新的HTTP状态码-103, 总结一下就是提前预加载(css、js)文档,提升用户的访问速度。Summary: a new status code that lets the server send headers early, before the main headers. This helps with optimisations like preloading. Example

2017-11-08 16:21:10 4267

转载 [CDN 技术] HTTP参数中Etag的重要性

Etag在HTTP1.1中有介绍,主要的作用就是在(css file, image, javascript file)文件后面添加一个唯一的参数(相当于查询参数字符串),Etag有服务器端生成,并且随着文件的改变而改变,这样浏览器端就会只重新请求获取 Etag发生变化的文件,减少浏览器端数据的流量,加快浏览器的反应速度,重要的是减轻服务器端的压力,所以服务器端Etag的实现就比较重要了.现在我们有个问题为什么要使用Etag呢?Etag主要为了解决Last-Modified无法解决的一些问题.他能比Last_

2017-11-04 20:18:21 2388

原创 提升自旋锁spinlock的性能-pause指令

看源码的时候get的一个新的知识点,可以提升自旋锁spinlock的性能-pause指令,看到的源码如下: #define cpu_pause() __asm__ (".byte 0xf3, 0x90") #define NOP_CPU3(n) {int i = 0; while(i++ < (n)) cpu_pause();} // 调用代码

2017-10-24 14:22:43 3441

转载 GCC在C语言中内嵌汇编 asm __volatile__

在内嵌汇编中,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达式的值读入哪个寄存器,以及如何将计算结果写回C 变量,你只要告诉程序中C语言表达式与汇编指令操作数之间的对应关系即可, GCC会自动插入代码完成必要的操作。1、简单的内嵌汇编例:__asm__ __volatile__("hlt"); "__asm__"表示后面的代码为内嵌汇编,"asm"是"__asm__"的别名。"__volatile__"表示编译器不要优化代码,后面的指令 保留原样,"volatile"是它的别名。括号

2017-10-24 09:46:19 534

转载 使用Nginx抵御DDOS攻击

DDOS是一种通过大流量的请求对目标进行轰炸式访问,导致提供服务的服务器资源耗尽进而无法继续提供服务的攻击手段。一般情况下,攻击者通过大量请求与连接使服务器处于饱和状态,以至于无法接受新的请求或变得很慢。应用层DDOS攻击的特征应用层(七层/HTTP层)DDOS攻击通常由木马程序发起,其可以通过设计更好的利用目标系统的脆弱点。例如,对于无法处理大量并发请求的系统,仅仅通过建立大量的连接,并周期性的发出少量数据包来保持会话就可以耗尽系统的资源,使其无法接受新的连接请求达到DDOS的目的。其他还有采用发送大

2017-10-19 14:23:36 459

原创 将进程绑定到特定的cpu - taskset命令

在测试斗地主程序的时候,发现单核cpu的运行时间总比多核cpu运行时间块,用taskset命令一看,果然是一个进程运行在两个cpu上。 Score of team 1 is : -1154 Score of team 2 is : 148 Score of team 3 is : 1006 real 4m12.768s user 0m12.307s sy...

2017-10-12 09:57:03 2460

原创 采坑memset初始化vector的变量---vector iterators incompatible

和别人合作一起写一个斗地主,我负责拆牌这一块,每次需要返回最优的牌型。因为我习惯了变量初始化用memset,vector的变量也意外的用了memset。结果尼玛的调试了好长时间,才知道memset初始化vector变量会导致向量丢失,不能正常的遍历,但是可以正常的push_back。 编译器报错是:“vector iterators incompatible”,有毛用。 加代码调试编译报错的地方让人根本摸不着头脑,这一块怎么会错呢? 纠结了好长时间。其实下面这一块是对的。

2017-10-09 16:05:53 9099

原创 利用伪B站做测试的时候遇到304的一点小问题

用户先请求nws服务器,如果本地可以命中,nws直接返回文件给用户; 如果本地没有命中,nws回源向伪B站请求文件,就是简单的cdn的思路。Created with Raphaël 2.1.0用户nws服务器 伪B站作为一个做cdn的,用户永远之上。 用户要求怎么做,我们就怎么来。 基于这样的想法,我在测试nws是否可以正确的吐出伪B站给数据, 就算伪B站给nws的数据是错误的,不符合常规,nws也

2017-09-28 11:32:27 606

原创 利用pstack 和 strace分析程序在哪里耗时?

目前测试了nws服务器代码中的while(!stop){...}死循环,发现while循环一次有的线程需要100ms左右,这个时间就有点长了。于是利用如下linux的ps、pstack和strace对程序进行了分析。 ps -aux | grep nws 可以看出nws的pid为171211 pstack 171211 打印出nws进程下所有的线程栈信息。可以看出程序好几个线程都卡在pwrite这一步。strace -o output.txt -T -tt -e trace=all -

2017-09-12 13:23:58 12139 2

原创 利用aio+epoll简单改写sendfile

其实说白了,也就是想直接尝试利用一下aio +epoll结合代码,在利用人家sendfile的接口,就是替换sendfile,自己随便玩玩传输文件。我采用的是linux原生的libaio,glibc实现的aio貌似很多在吐槽,性能也不好直接别抛弃了。 这里提一下linux libaio的相关结构体,这些可以在/usr/include/libaio.h文件看到,也有io_prep_pread和

2017-08-17 15:55:26 1353

原创 shell脚本学习(三)- sed

1. 打印指定行 sed ‘10’p –n 1.txt; sed‘1,4’p –n 1.txt; sed ‘5,$’p –n 1.txt; 2. 打印包含某个行字符串的行 sed –n ‘/root/’p 1.txt 可以使用^ . * $等特殊符号 3. –e可以实现多个任务同时打印 sed –e ‘/root’p –e ‘/body/’p –n 1.txt 4. 删除行 sed ‘/root/’d 1.txt ; s

2016-12-09 10:46:53 759

原创 shell脚本学习(二)-grep

1.     grep/egrep      -c  :打印符合要求的行数     -n :在输出符合要求的行的同时连同行号一起输出     -v :打印不符合要求的行      -r : 会把目录下面所有的文件全部遍历一遍      -i : 忽略大小写2.     例子介绍       过滤出带有某个关键词的行并输出行号

2016-12-06 22:44:37 651

原创 shell学习笔记(一)

1.     history          执行命令历史纪录2.     !!             执行上一次命令3.     !n             执行这条命令4.     !vim           执行最近的一个vim5.     alias            可以简单修改名字别名也就是把猫叫个咪 也可以比如alias ls

2016-12-05 22:07:10 325

原创 linux下简单vim命令的练习使用

gg         最开始处 nG :n        光标之后多少行 $           光标的末尾 0 ^         光标的行首 o          开辟光标下一行插入 O          开辟光标上一行插入 x          删除光标所在处字符 nx          删除光标所在处后n个字符 ndd         删除n行 dG

2016-10-13 21:50:33 1245 1

原创 linux下匿名用户上传文件

1、打开配置文件:#vi /etc/vsftpd/vsftpd.confanonymous_enable=YESwrite_enable=YESlocal_umask=022anon_upload_enable=YES #容许匿名用户上传文件anon_mkdir_write_enable=YES #容许匿名用户建立目录anon_other_write_enable=YES #容许匿

2016-10-12 20:33:18 3339

原创 动态规划之最大k乘积,编辑距离,k好数,节点选择,背包问题

这几天真是闲的没事做了,都不知道干什么了,把自己之前的动态规划代码整理一遍,现在写代码也有了自己的风格。直接复制上去自己看吧,也懒得解释了1.最短编辑距离,里面用到了重定向读写#include #include #define MAXLEN 100#define min(a,b,c) (((a<b?a:b)<c)?(a<b?a:b):(c))int c[MAXLEN][M

2016-10-12 20:20:47 628

linux下vim的自动补全的插件

如果用过sublime,就知道它的自动补全很好用,这个在linux下的vim也可以

2016-01-02

浅谈数据库

浅谈数据库,有一些基本概念,对于数据库的基本操作,增删改查做了一个ppt

2014-10-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除