一次孤儿 socket 过多导致负载高的问题排查过程

一、问题现象 客户报障,说使用了我们的网关设备后网络经常中断。具体的情形是用我们设备做代理上网后,流量图显示流量每隔两分钟就会直线下跌一次,同时就伴随着内网用户断网。 经过排查后发现问题原因是设备负载太高了导致,出问题时候的负载趋势图为: 从图形来看,负载是每 1-2 分钟就会上升一次,而且上升得特别明 ... 阅读更多

C++中的异常处理

一、异常处理 1.1 异常的基本用法 C 语言中因为没有异常处理 (只能通过返回值来判断错误) 机制一直被诟病,因此 C++也引入了 try...catch 机制,使得 C++也能像 java/python 一样来捕获异常。 它的用法和大多数其他语言基本一致,非常简单: [crayon-6947ee8edde6752 ... 阅读更多

web 安全之 sql 注入

一、关于 SQL 注入

sql 注入是目前 web 应用中一种常见的攻击方式,通过恶意构造参数生成不可预期的 sql 语句,来完成不可告人的秘密。危害极大!它的影响主要有以下两点:

第一:拖库,拖库的意思是直接把整个数据表甚至库中的数据都拖出来了。当今的互联网环境中,数据毫无疑问在任何公司都是最宝贵的财富,一旦数据泄露,轻者造成经济损失,重者可能造成法律责任。

第二:删库,拖库的危害可能只是和他人共享了劳动成果,而删库就不同了,数据被共享了不说,还把数据都删了。这就是典型的——走别人的路,让别人无路可走!

近期闹得沸沸扬扬的 「微盟删库」 事件,因为运维人员把数据库删了,导致业务接近一周都没有恢复,股价直接下跌 10+亿。可见 「删库」 的危害实在太大!

阅读更多

MySQL 报错 Lost connection to MySQL server at 'reading initial communication packet'的解决办法

使用 mysql 连接远程服务器时报错,在百度和 google 查找都没有找到能解决问题的办法:

分析应该是以下两个原因导致的: 服务器有防火墙,禁止 3306 端口的访问。 用户没有授权远程访问。 第二个错误首先被排除掉了,根据多年的经验来看, ... 阅读更多

I/O 模型

一、 I/O 模型分类 unix 环境下有 5 中 IO 模型: 阻塞式 I/O 非阻塞式 I/O I/O 多路复用 信号驱动 I/O 异步 I/O(POSIX 中的 aio_系列函数) 常用的是前三种方式,特别是多路 I/O 复用是目前使用最广泛的 I/O 模型。它不仅包含了阻塞和非阻塞,同时也包含了异步调用。非阻塞+异步是效率最高 ... 阅读更多

iterm2 保存 ssh 连接信息

点击左上角 Iterm2 任务栏,依次选择 Preferences - Profile: 点击左下角的+新增一个配置项,在右边的 command 处输入 ssh 登录的命令:

然后把 tab 页面切换到 Advanced,点击 Edit 进入触发器编辑页面: ... 阅读更多

epoll 中的边缘触发 ET 和水平触发 LT 模式

epoll 中的触发模式有两种,边缘触发和水平触发,默认情况下使用的是水平触发。 边缘触发 (ET) 的意思是当电平出现变化的时候才触发事件,如果设置了边缘触发,执行 epoll_wait 时,内核检测到数据到达后立马返回到应用层。但是这仅仅只返回这一次,如果缓冲区中的数据没有读取完,再次执行 epoll_wa ... 阅读更多

猴子拿苹果问题-匿名信号量

一、猴子拿苹果问题 逛脉脉时,看到一网友遇到的面试题:有 9 个苹果,2 只猴子。一个猴子每次拿 2 个苹果,一个猴子每次拿 3 个苹果。如果剩余的苹果数量不够猴子拿的数量,则停止拿苹果。请用多线程的方式模拟上面的描述。 看到问题的第一眼,觉得很有趣,脑海中第一个想到的就是通过信号量来实现,因为信号量是最适合做线 ... 阅读更多

进程间通信之共享内存

共享内存是所有 IPC 通信中效率最高的,它通过把文件映射到用户进程空间,然后直接通过地址访问来实现多进程通信。相对于其他 IPC 通信方式而言,少去了把数据从用户空间复制到内核空间,再从内核空间复制到用户空间的过程,因此效率相当高。 用图形来表示就是: 操作共享内存的函数: [crayon-6947ee8 ... 阅读更多