Linux内核模块 --- NetFilter

一方面自己开始写OS,一方面也开始做一些Linux kernel相关的研究,顺便写一下kernel的module,因为看到一篇论文是基于net-filter做一个P2P的流量监测器。 自己也对这个有点兴趣,于是乎就开始准备按图索骥了。 不过自己不做这个P2P测量,而是准备做一个网络监管的小module,一方面是来练手,一方面是熟悉linux kernel module的开发流程。 首先就是设计,因为是基于Net-Filter框架所以main函数一定一个钩子。 目前的一个设计的文件结构是这样: ├── COPY... [阅读全文]

Mac 10.10上编译 Bochs

想开始写操作系统了,但是卡在Mac上编译Bochs上,看了几个issue,还是没有头绪, 因为Apple已经放弃了x11和carbon(有兴趣可以看这文档), 终于找到了如下的方法: 第一步,安装SDL库 可以使用HomeBrew的方式: brew install sdl 第二步,Configure Bochs ./configure --enable-ne2000             --enable-all-optimizations             --enable-cpu-level=6             --e... [阅读全文]

MySQL的一个坑

PS:其实也不是坑吧,主要是之前没有关注这个东西 首先看一下坑的由来: 昨天运营那边反馈过来一个问题,就是手机端商品存在重复.然后开始排查,手机端的商品总数和PC上是一至的,但是手机端存在重复的商品,就意味着有的商品没有显示.已开始以为是缓存问题,在更新select的时侯,阿润老师的排序crond更新了排名,导致问题,但是后来取消了缓存,发现问题还在. 最后问题定为在数据库上,我执行了如下的sql语句(也是常用的分页代码): SELECT * FRO... [阅读全文]

蘑菇街的101天 — 团购重构

PS:很长时间没有写博了.主要原因就是最近一个人在支撑蘑菇街的团购业务,分身乏术.虽然没有写出分享,但还是有个人的笔记. 相对而言,博客的价值在于分享,但是由于很多的时侯,分享依赖的业务场景不同,所以很多的时侯并不适用,亦或者现场恢复困难,写出来的东西没有具体的实例,感觉不太稳妥. 最简单的一个就是关于innoDB索引计算的一个case.排查过程不说了,直接上结果,就是mysql在进行索引消耗计算的时侯存在一定的误差,可能会使用不恰当的索引... [阅读全文]

一次线上debug的过程

事情的缘由是这样的,很久之前,我写了一个爬虫,然后爬虫幸福的运行在服务器上,突然有一天,我收到一份邮件,上面写着爬虫失效,然后 肯定先是ssh上去看看进程. 先top一下看状况,一切良好,java进程的运行比较平稳,所以排除了死循环的错误,或者是NPE退出的错误. 然后线上使用jstack查了下虚拟机栈,然后就发现了如下一段奇葩的栈: "pool-6-thread-629" prio=10 tid=0x00007fcfb4004000 nid=0x51e0 runnable [0x00007fcf6c6c4000] java.lang.Thread.State: RUNNABLE at java.net.SocketInputStream.s... [阅读全文]

Java,Go,NodeJS性能测试

PS: 项目地址:github,这边有所有的代码 写在文章之前: rpctest文件夹下为测试程序,使用说明见文档,改写自网上淘宝的性能测试用代码 go java nodejs文件夹下为三个不同版本的rpc echo server. 线下测试看,go语言的效率和Nodejs差不多,java因为没有解决并发问题所以只有单线程,效率约为前两者的70~80%,后续将会使用netty进行测试比较 测试环境: Intel i5 4核4线程 内存8G UBuntu x64 文章开始 文章缘由,因为公司中真好有一个代码竞赛,就是... [阅读全文]

关于容器的新的看法

关于Java中的容器,大家因该第一个想到的是Tomcat,毕竟这应该是学习Java中的第一个容器(如果玩Java Web的话)。在经历了第一个项目和第二个项目之后,我才开始体会到容器的 必要性。 在此之前,我之前的所有的Java程序都是指定main函数的runnable jar package。这样做确实简单。而且快捷。但是有一个很明显的缺点,就是你无法控制他的生命周期。举一个很 简单的例子,如果程序挂了,除了运气比较好去top或者ps一把发现没有这个进程之外,貌似没有好的... [阅读全文]

第一个任务 -- 店铺爬虫

关于这个项目,首先需求比较简单.或者说单一吧.唯一要做的就是将PHP传来的任务给做完.没有多余的爬取,只需要爬取一个页面上的商品描述和商店的描述.唯一好玩的一点就是需要在一周时间内 爬取180万url左右的数据.同时还要考虑对面的防刷设置.分配给的测试资源有两台16核32G的服务器. 很显然.爬虫的关键在于VPS的分配,因为一个ip访问某个网站的频率有限制.在有限的时间,要想爬取更多的网页,就需要多个vps,要多少呢.理论上,服务器的出口带宽为1000M... [阅读全文]

阅读Redis源码(三) -- redis通信协议与事件驱动

在redis中,关于事件驱动框架的代码集中在ae.h/ae.c中.作者也在头部设置了介绍:a simple event-driven programming library. 这个框架其实很简单,核心就是一个消息 队列,同时只有一个线程负责对其进行处理,这里面的调度思想,还是简单的优先级队列,文件操作优先级永远高于时间操作.而且任务之间并不会进行抢占. 具体执行过程,可以参照如下干特图: time ----------------------------------------------------------------------->| |<---- 10 ms ---->|<---- 10 ms ---->|<---- 10 ms... [阅读全文]

阅读Redis源码(二) -- 数据库及持久化策略

之前的一篇文章写了关于Redis的字典数据结构,但是,他并不是与我们直接交互的.因为我们在进行添加字段的时候,往往需要添加过期值,这一点我们在字典数据结构中没有能够得到体现. 所以,我们需要关注另外一个数据结构,redisDb.即Redis的数据库储存,在redis.h中,该结构体的定义如下. typedef struct redisDb { dict *dict; /* The keyspace for this DB */ dict *expires; /* Timeout of keys with a timeout set */ dict *blocking_keys; /* Keys with clients waiting for data (... [阅读全文]