关闭
当前搜索:

[置顶] epoll的ET和LT模式下,accept,recv,send写法

epoll有两种事件模型: Level Triggered (LT) 水平触发 socket接收缓冲区不为空,有数据可读,读事件一直触发 socket发送缓冲区不满,可以继续写入数据,写事件一直触发 Edge Triggered (ET) 边缘触发 socket的接收缓冲区状态变化时触发读事件,即空的接收缓冲区刚接收到数据时触发读事件 socket的发送缓冲区状态变化时触发写事件,即满的...
阅读(441) 评论(0)

[置顶] docker registry带ssl认证的私有仓库搭建

1.首先docker pull registry默认下载最新版的镜像,我这边是2.6.2版本 2.这边考虑私有仓库部署的服务器可能没有网络,可以使用docker save -o registry.tar registry:2.6.2保存一个镜像,然后把registry.tar打包到部署包里面,下次使用docker load -i registry.tar加载到本地镜像 3.保证ssl已安装,且/...
阅读(749) 评论(0)

[置顶] struct中的数组和指针

这里可以看出来两点: 1.struct的内存对齐是按照成员最大的那一个来的 2.数组在struct中不占大小 重点说第2个,在linux内核代码中屡见不鲜! 这个用法主要用于变长buffer,test1的大小为4,结构体中的data[0]不占用任何空间,甚至是一个指针的空间都不占,data在这儿只是表示一个常量指针,这个特性是编译器来实现的,即在使用test1.data的时候,这个指针就是表示...
阅读(363) 评论(3)

[置顶] 从epoll源码分析它的使用

首先来看看epoll_create的真身SYSCALL_DEFINE1(epoll_create, int, size) { if (size <= 0) return -EINVAL; //也就是说参数size根本用不上 return sys_epoll_create1(0); }再来看看epoll_create1的真身SYSCALL_DEFINE1(epoll_c...
阅读(756) 评论(0)

[置顶] 线程池的最优大小

计算密集型应用(CPU密集) 顾名思义就是应用需要非常多的CPU计算资源,I/O在很短的时间就可以完成,而 CPU 还有许多运算要处理。 在计算密集型应用中,线程池的大小应该等同于主机中 CPU 的数量。再添加更多线程将会打断请求的处理,因为线程的上下文切换也会延迟响应时间。非阻塞型 IO 应用将会是 CPU 密集型的,因为在请求得到处理的时候没有线程等待时间。...
阅读(1094) 评论(0)

[置顶] libevent多线程使用bufferevent的那些事

void do_accept(struct evconnlistener *listener, evutil_socket_t fd, struct sockaddr *sa, int socklen, void *ctx) { //不使用Nagle算法,选择立即发送数据而不是等待产生更多的数据然后再一次发送 int optval = 1; setsockopt(fd, SO...
阅读(2447) 评论(2)

[置顶] C++封装MySQL预处理C API

#ifndef _PRE_STATEMENT_H_ #define _PRE_STATEMENT_H_ #include "mysql.h" #include class pre_statement { public: pre_statement(); ~pre_statement(); int init(MYSQL* mysql, string& sql); int set_pa...
阅读(1150) 评论(0)

[置顶] Linux下高并发socket,单机提供五十万连接

引用《Linux网络编程》 一个完整的Socket描述,五元组,{协议,本地地址,本地端口,远程地址,远程端口} 当我们自己写客户端测试程序来测试我们的服务端程序性能的时候,经常会遇到连接量上不去的问题,大多都是停留在2万左右。如果我们的测试机器有限,要想达到百万连接量的测试,那我们哪里去找50台测试机器了?实际的测试也不可能给50台测试机器。那么根据这个五元组,我们可以做一下文章。首先协议已...
阅读(1909) 评论(0)

pipework给docker设置mac

继我上一篇文章pipework给docker设置ip,现在需求增加了还要设置mac,pipework也提供了这个功能。我们可以看看pipework的语法: Syntax: pipework hostinterface [-i containerinterface] [-l localinterfacename] [-a addressfamily] guest ipaddr/subnet[@d...
阅读(561) 评论(0)

github管理代码

首先要去https://github.com/注册一个账号,然后Create a new repository,记下我们的用户名,邮箱和仓库名字。 然后在linux上安装git服务,执行ssh-keygen -t rsa -C “314899581@qq.com”生成秘钥,执行完成之后在~/目录下会生成.ssh/目录,我们进入~/ .ssh/目录,拷贝id_rsa.pub的内容,回到gith...
阅读(101) 评论(0)

在windows下写linux代码直接编译

大多数人都习惯于在windows下用source insight编辑代码,然后用xftp拷贝到linux下进行编译,如果有小的改动,就直接在linux下用vim进行编辑修改。至于为什么是vim,工作这么多年,还没有一家公司的服务器是带界面的,可以安装使用ide的。 稍微进阶一点的办法,就是实现linux和windows文件夹共享,我们在windows上直接对着共享文件夹内的代码进行编辑,然后就在...
阅读(729) 评论(2)

用strace查找进程卡死原因

最近遇到进程卡死的情况,但是自己调试的过程中并不一定能复现,都是需要运行一段时间某些条件下才会触发,对于这种运行着不能破坏现场的情况,我们可以使用gdb -p和strace -p来跟踪。 首先我们用ps auxf查看我们的进程执行到了哪一步: 可以看到执行到了docker exec -i 178.20.1.229_0115034556 ls然后就卡死了 然后我们进一步通过strace查看...
阅读(607) 评论(0)

python的libev库pyev一点心得

http://pythonhosted.org/pyev/examples.html 这是官方文档给的例子,基本需求对照着看了就可以写了,一般用事件模型,无非就是关心一个有连接可以accept,一个有数据可以read的事件,然后就是定时器,这里都有了。 1.例子中的reset函数 事件每次触发结束了,都要调用reset函数,reset函数的作用是重新注册一次事件,为什么要这么做了?以前用惯了l...
阅读(337) 评论(0)

python查看模块,对象的函数

这段时间在用libev的python版本事件模型,总共只有一个py.so文件,没有.py文件查看源码查看接口,最开始用shell命令直接查看.so的接口不尽人意。然后发现python提供了查询的接口在代码中可以直接打印出来看。 第一个:dir() 例如 print dir(pyev) 第二个:__dict__ 例如 print pyev.__dict__.items() loop...
阅读(642) 评论(0)

linux查看.so导出函数

方法一 nm -D *.so 方法二 objdump -tT *.so...
阅读(608) 评论(0)

pymongo连接超时的做法

通常我们连接mongo数据库会这样做: client = pymongo.MongoClient(host, port) 但是会发现一个问题,如果mongo连接不上,会在这里阻塞很久。解决办法可以看官方文档http://api.mongodb.com/python/current/api/pymongo/mongo_client.html#pymongo.mongo_client.MongoCl...
阅读(483) 评论(0)

源码安装pip

今天本来要使用Twisted,但是公司的编译环境使用的Gentoo,没有yum,apt-get,我每次安装python库都是自己下载源码用python setup.py来编译安装,然后拷贝/usr/lib64/python2.7/site-packages下的python库到我的运行环境对应目录下面,源码安装的在这个目录下库的文件夹名字会带上后缀.egg。但是今天这个Twisted真是麻烦了报错...
阅读(638) 评论(0)

docker -v :rw :ro

先引用官方文档原话:If neither ‘rw’ or ‘ro’ is specified then the volume is mounted in read-write mode.(https://docs.docker.com/engine/reference/run/#volume-shared-filesystems) 官方文档说不指定的时候默认是rw模式。 用docker in...
阅读(691) 评论(0)

2>/dev/null和>/dev/null 2>&1和2>&1 >/dev/null

标准输入0    从键盘获得输入 /proc/self/fd/0 标准输出1    输出到屏幕(即控制台) /proc/self/fd/1 错误输出2    输出到屏幕(即控制台) /proc/self/fd/2 /dev/null代表linux的空设备文件,所有往这个文件里面写入的内容都会丢失,俗称“黑洞” 1. 2>/dev/null意思就是把错误输出到“黑洞” 2. > /dev/n...
阅读(505) 评论(0)

source命令的巧用

首先,通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。例如,当我们修改了/etc/profile文件,并想让它立刻生效,而不用重新登录,就可以使用source命令,如source /etc/profile。 其次,source filepath或者. filepath,sh filepath或者./filepath区别: 1. sh filepath会重新建立一个子she...
阅读(506) 评论(0)

python使用原始套接字发送二层包(链路层帧)

发送端代码:#!/usr/bin/python # -*- coding: UTF-8 -*-import socket import structraw_socket = socket.socket(socket.PF_PACKET, socket.SOCK_RAW, socket.htons(0x1234)) raw_socket.bind(("eth0", 0)) packet = struc...
阅读(507) 评论(0)

python使用epoll实现的服务端例子

#!/usr/bin/python # -*- coding: UTF-8 -*- import socket import selectsend_data = "hello world!" send_len = len(send_data) recv_len = 1024 tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)...
阅读(397) 评论(0)

pipework给docker设置ip

pipework下载地址 解压之后,有一个pipework文件,其实就是shell脚本。 1.创建启动一个容器 docker run -it -d –name test_pipework –net=none centos bash 2.给docker设置ip sh -x /usr/bin/pipework br0 test_pipework 192.168.0.12/24@192.168....
阅读(402) 评论(0)

docker registry私有仓库的一些错误解决办法

Error response from daemon: login attempt to https://test.io:5000/v2/ failed with status: 401 Unauthorized 这种情况是用户名或者密码错误导致Error response from daemon: Get https://test.io:5000/v1/users/: x509: certifi...
阅读(816) 评论(0)

linux c使用system调用shell脚本

system的原理其实就是调用fork创建子进程去执行shell命令,然后返回最后一条shell命令的状态值。linux下man system可以看到返回值说明: 1.如果返回值等于-1就是system函数执行失败,准确的说是fork创建子进程失败。 2.shell执行最后一条语句的状态值放在返回值的低8位,使用WEXITSTATUS宏可以获得状态值。 3.使用WIFEXITED宏取返回值判断...
阅读(884) 评论(0)

在docker内部创建和启动新的docker

架构师开始给我分配这样一个任务的时候我还以为是嵌套在docker里面创建docker,其实不然,毕竟最后形成的架构,是要创建和启动的docker在一个层级被管理。 这里我们可以看到docker启动之后,会有一个dockerd的守护进程,一个containerd管理进程。注意dockerd进程绑定监听在了/var/run/docker.sock文件上,很明显,docker之间通讯使用的unix_...
阅读(557) 评论(0)
60条 共3页1 2 3 下一页 尾页