- 博客(90)
- 资源 (2)
- 收藏
- 关注
原创 CentOS release 6.10升级glib2.17
#>wget https://ftp.gnu.org/gnu/glibc/glibc-2.17.tar.gz#>wget https://ftp.gnu.org/gnu/glibc/glibc-2.17.tar.gz --no-check-certificate#>pwd#>ls#>ll#>tar zxvf glibc-2.17.tar.gz#>ll#>/bin/rm -rf glibc-2.14#>ll#>cd glibc-2.
2021-12-12 20:00:06
379
1
原创 排查cpu升高问题(strace -cp pid)
https://chowdera.com/2020/12/202012012115212269.html
2021-07-19 18:55:23
337
原创 Plantuml类图用法
@startumltitle uml类图用法/' + 表示 public - 表示 private # 表示 protected ~ 表示 package private'//' 类的关系有泛化、实现、依赖、关联等,其中关联又分为一般关联、聚合、组合。'/ClassA <|-- ClassB: 泛化ClassA <|.. ClassB: 实现ClassA <.. ClassB : 依赖ClassA <-- ClassB : 关联ClassA o--.
2021-02-25 16:36:11
830
原创 win10环境下 FFMPEG + VLC 推送/播放rtp流
一、环境准备1、安装FFMPEGhttps://www.gyan.dev/ffmpeg/builds/ffmpeg-git-full.7z解压并将目录配置到环境变量2、安装VLChttps://www.videolan.org/vlc/download-windows.zh.htmlhttps://www.videolan.org/vlc/index.zh.html3、下载音视频测试文件(mp4格式)https://sample-videos.com/index.php#sample-m
2021-01-12 18:05:05
2057
3
原创 lsof -n | grep deleted 解决/dev/vda1使用率100%问题
// 查看磁盘使用率为100%root@kms-01:/# df -hFilesystem Size Used Avail Use% Mounted onudev 471M 0 471M 0% /devtmpfs 99M 13M 86M 13% /run/dev/vda1 20G 20G 0 100% /tmpfs 493M 0 493M 0% /dev/.
2020-12-31 16:00:40
1169
1
原创 webrtc jitter buffer
/* ******************************************************************************** 一、jitter buffer 介绍 二、jitter 估计 三、buffer 处理 rtp 包逻辑 四、接收和解码流程 五、FrameBuffer 类介绍 ******************************************************************************** */.
2020-10-10 18:27:26
1265
1
转载 [转发] mysql的max_connection_errors错误
前言打开项目后台发现数据库连接报错,没仔细看大概看了下,噢,是连接数太多了,应该过一会儿就好了,后面发现同事可以访问,我竟然不行,认真看了下这不仅是连接太多,而且还是同一个ip连接太多。懵。错误关键字Host is blocked because of many connection errors; unblock with ‘mysqladmin flush-hosts’错误原因短...
2019-07-12 20:08:01
1287
原创 libco协程库源码解析
一、什么是协程? 进程:操作系统资源分配的最小单位,进程有独立的地址空间,每个进程都有自己的数据段、代码段和堆栈段。进程的上下文切换需要对寄存器、内核堆栈、虚拟内存、文件句柄等进行切换,因此切换开销比较大,但相对比较稳定安全。 线程:操作系统调度的最小单位,拥有自己独立的程序计数器、寄存器和线程栈。因为同一个进程内的线程共享同一个虚拟内存空间,因此线程的切换不需要对虚拟内存空间和内...
2019-07-01 16:00:35
870
原创 Nginx 反向代理配置
upstream up_dir{ server unix:/dev/shm/test.sock.0 max_fails=1 fail_timeout=60s; server unix:/dev/shm/test.sock.1 max_fails=1 fail_timeout=60s; server unix:/dev/shm/test.sock.2 max_fails=...
2019-06-12 18:25:37
254
原创 TCP/IP TCP快速重传
Q:TCP为什么要设计快速重传机制在没有快速重传/快速恢复算法之前,重传依靠发送方的重传超时,在timeout时间内如果没有接收到对方的ACK,默认是丢包了,发送方就重传。包丢失的原因:(1)包checksum出错、(2)网络拥塞、(3)网络断,包括路由重收敛。发送方无法判断是哪种情况,于是采用最笨的方法,将自己的发送速率减半,即CWND减为1/2(congestion Window)。这...
2019-06-11 21:01:04
1172
原创 C++ 内存分区
在C++中,内存分成5个区,堆、栈、自由存储区、全局/静态存储区、常量存储区栈:由编译器在需要的时候分配,不需要的时候自动清除。里面的变量通常是局部变量、函数参数等。堆:new和delete来申请和释放。自由存储区:由malloc和free来申请和释放。全局/静态存储区:全局变量和静态变量被分配到同一块内存中,C语言中全局变量又分为初始化的和未初始化的,C++中不区分,他们共同占用同一块内...
2019-06-10 20:54:58
232
原创 C++ public、protected、private的权限控制
一、访问权限类的内部成员变量和成员函数之间没有权限控制,都是可以互相访问的。例如:private函数可以访问public函数、protected函数可以访问private变量等等。类的实例变量可以访问public类型、但不能访问protected和private类型成员变量/函数。类的友元函数、友元类可以访问protected和private类型成员变量/函数。二、继承权限派生类的成员函...
2019-06-10 14:03:47
628
原创 MySQL索引
索引的目的是为了提高数据查询的效率。常见的索引模型:哈希表、有序数组和搜索树。 哈希表:键-值(key-value),把值放在数组里,用一个哈希函数把key换算成一个确定的位置,然后把value放在数组的这个位置。解决哈希冲突的方式是链表。适用于只有等值查询的场景。 有序数组:按顺序存储。查询用二分法就可以快速查询,时间复杂度是:O(log(N))。查询效率高,更新效率低。适用于...
2019-05-10 19:56:37
272
原创 MySQL事务
Q:事务的概念是什么?事务就是要保证一组数据库操作,要么全部成功,要么全部失败。在MySQL中,事务支持是在引擎层实现的。MyISAM引擎不支持事务,InnoDB引擎支持事务。Q:事务的四大特性(ACID)A:atomicity 原子性:事务是由一个或一组相互关联的SQL语句组成,这些语句被认为是一个不可分割的单元,要么都成功要么都失败。C:consistency 一致性:对于数据库的...
2019-05-07 19:55:20
219
原创 MySQL日志系统
mysql> create table T(ID int primary key, c int);mysql> insert into T values(1,1);mysql> insert into T values(2,2);mysql> insert into T values(3,3);mysql> update T set c=c+1 where ...
2019-05-06 21:07:29
314
原创 Muduo源码分析:TCP服务端和客户端
Muduo采用经典的Reactor架构,支持以线程池的方式实现多线程并发处理。一、socket通信架构二、muduo tcp网络架构 话不多说,直接上图下面,对TCP server和client中用到的主要类进行说明线程池管理用到的三个类:EventLoopThreadPool、EventLoopThread、Thread1、 用于创建和管理线程池:EventL...
2019-04-29 16:14:45
702
原创 [多线程] pthread_cond_signal()和pthread_cond_wait()用法解析
pthread_mutex_t count_lock; //互斥量pthread_cond_t count_nonzero; //条件变量unsigned count;/* 线程1 */decrement_count(){ pthread_mutex_lock(&count_lock); while (count == 0) { p...
2019-04-26 17:08:17
7066
2
原创 内存管理函数
一、基本用法#include <unistd.h>int brk(void *addr);void *sbrk(intptr_t increment); //返回空间地址brk是系统调用,通过传递的addr来重新设置program break,成功返回0,否则返回-1。sbrk不是系统调用,是C库函数,用来增加heap,增加的大小通过参数increment来决定。in...
2019-04-17 10:29:12
270
原创 tcmalloc内存管理
一、前言1、如何分配定长记录例如,我们有一个page的内存,大小为4kb,现在要以n个字节为单位进行分配。为了简化问题,就以16字节为单位进行分配。将4kb的内存划分为16字节的单元,每个单元的前8个字节作为节点指针,指向下一个单元。初始化的时候把所有指针指向下一个单元。分配时,从链表头分配一个对象出去,释放时,插入到链表。由于链表指针直接分配在待分配内存中,因此不需要额外的内存开销,...
2019-04-17 10:11:31
391
原创 内存分配算法
内存管理中有一个很重要的概念叫内存碎片,内存碎片分为内部碎片和外部碎片,内部碎片是分配器分配的内存大于程序申请的内存。外部碎片是内存块太小,无法分配给程序使用。1、FreelistFreelist,通过链表,把内存中空闲块连接起来。分配的时候,找到大小合适的block,把它切分成两块,一块是待分配的大小,另一块放回free-list;释放的时候,插入到链表中,并且合并一下前后的...
2019-04-17 09:52:39
741
原创 MySQL事务
事务一、事务的四大特性(ACID)A:atomicity 原子性C:consistency 一致性I:isolation 隔离性D:durability 持久性原子性:事务是由一个或一组相互关联的SQL语句组成,这些语句被认为是一个不可分割的单元,要么都成功要么都失败。一致性:对于数据库的修改是一致的,即多个用户查的数据是一样的。一致性主要由mysql的日志机制处理,他记录数据的变...
2019-03-29 20:16:12
140
原创 MySQL存储引擎:MyISAM存储引擎、InnoDB存储引擎
一、InnoDB存储引擎1、InnoDB介绍 InnoDB的数据存储在表空间中,表空间是由InnoDB管理的一个黑盒子,由一系列的数据文件组成。InnoDB可以将每个表的数据和索引存放在单独的文件中。InnoDB采用MVCC来支持高并发,并且实现了四个标准的隔离级别。二、MyISAM存储引擎1、MyISAM存储 MyISAM会将表存储在两个文件中:数据文件和索引文件,分别...
2019-03-28 21:27:10
189
原创 MySQL索引
一、索引1、索引定义 索引是数据库中专门用于帮助用户快速查询数据的一种数据结构。索引需要单独保存在索引文件中。类似于字典中的目录,查找字典内容时可以根据目录查找到数据的存放位置,然后直接获取即可。优点:可以提高检索数据的速度缺点:创建和维护索引需要耗费时间2、索引分类(1)普通索引:仅加速查询(2)唯一索引:加速查询 + 列值唯一(可能有null)(3)主键索引:加速查...
2019-03-28 20:11:07
126
原创 C++11生成32位/64位随机数(mt19937)
#include <iostream>#include <chrono>#include <random>int main (){ // obtain a seed from the system clock: unsigned seed1 = std::chrono::system_clock::now().time_since_ep...
2019-03-26 16:46:05
7484
原创 数据库索引为什么使用B树(B+树)
动态查找树主要包括:二叉搜索树、平衡二叉树、红黑树、B树,通过对树高度的降低可以提升查找效率。B树定义:一颗m阶的B树满足下列条件:(1)每个节点至多有m棵子树(2)除根节点外,其他每个分支节点至少有[m/2]棵子树(3)根节点至少有两棵子树(除非B树只包含一个节点)(4)所有叶节点在同一层上。B树叶节点可以看成一种外部节点,不包含任何信息(5)有j个孩子的非叶子节点恰好有j-1...
2019-03-25 21:20:43
5549
原创 epoll分析
一、用户态epoll用法#include <sys/epoll.h>int epoll_create(int size);// 创建一个epoll的句柄,size用来告诉内核这个监听的数目一共有多大。// 当创建好epoll句柄后,它就会占用一个fd值。在使用完epoll后,必须调用close()关闭,否则可能导致fd被耗尽。// 返回值:非负的文件描述符(fd)...
2019-03-15 20:29:35
515
原创 select 和 poll的用法
## select ##一、用户态select用法#include <sys/select.h>#include <sys/time.h>int select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *excepts...
2019-03-14 21:08:20
1314
原创 Linux下jsoncpp的编译与使用
一、cmake编译jsoncpp源码(1)下载jsoncpp源码源码地址:https://github.com/open-source-parsers/jsoncpp/tree/0.y.z(2)解压源码unzip jsoncpp-0.y.z.zipcd jsoncpp-0.y.z(3)使用cmake编译$ mkdir -p build/debug$ cd build/d...
2018-09-10 16:10:53
8864
3
原创 静态库和动态库的编译与使用
一、准备测试代码 建立头文件thirdApi.h及实现thirdApi.cpp,主函数main.cpp。main.cpp中使用头文件#include "thirdApi.h"// thirdApi.hint Add(int a, int b);int Minus(int a, int b);// thirdApi.cpp #include "thirdApi.h"i...
2018-09-10 15:32:17
175
原创 MySQL查看table占用的空间大小
// MySQL查看table占用的空间大小// 要查询的数据库名:my_database_name,要查询的表名:my_table_name。// 1、进入MySQL自带管理库:information_schema// 2、查询自带库tables的属性data_length,index_lengthmysql> use information_schema;mysql>...
2018-08-21 11:47:18
770
原创 C/C++ 宏参数名前加#变为字符串
在宏定义中,宏参数名前加上#表示为一个字符串。#include <stdio.h>#define SET_STRING(str1, str2) \ char outStr1[100] = #str1; \ char outStr2[100] = #str2; \ const char* str = "aabbcc"; \ if (#...
2018-08-14 17:38:08
7199
原创 [Python]字符编解码
# utf-8 str>>> utf8_str = "你好">>> utf8_str'\xe4\xbd\xa0\xe5\xa5\xbd'# unicode str>>> unicode_str = u"你好">>> unicode_stru'\u4f60\u597d'unicode
2018-08-01 11:44:52
202
原创 select、poll、epoll解析
一、select#include <sys/select.h>#include <sys/time.h>int select(int nfds, fd_set *readfds, fd_set *writefds, d_set *exceptfds, struct timeval *timeout);void FD_CLR(int fd, fd_set *s...
2018-07-18 20:09:41
443
原创 exit(), _exit(), return的区别
exit():清理I/0缓存区后再退出进程_exit():直接结束进程进入到内核中return:函数返回,如果返回的是main函数,则为退出程序exit()和_exit()的最大区别是:exit()函数在调用exit系统之前要检查文件的打开情况,把文件缓冲区的内容写回文件。_exit()函数直接将进程关闭,缓冲区的数据将会丢失。"缓冲I/O操作":对每一个打开的文件,在内存中都有一片缓冲区,每次读...
2018-07-15 22:44:14
269
原创 linux 进程地址空间分布
在32位操作系统中,内存空间拥有4GB的寻址能力。操作系统会把高地址的空间分配给内核,称为内核空间。(1)内核空间:默认情况下,Windows将高地址的2GB空间分配给内核,Linux将高地址的1GB空间分配给内核。剩下的2GB或3GB的内存空间称为用户空间。在用户空间里,有许多地址区间有特殊的地位,一般来讲,应用程序使用的内存空间里有如下"默认"的区域。(2)栈:用于维护函数调用的上下文。栈通常...
2018-07-15 22:43:00
3175
原创 标准库函数和系统调用的区别
一、标准库函数和系统调用的区别函数库调用:与用户程序相联系,在用户地址空间执行,属于过程调用,调用开销较小。系统调用:是操作系统的一个入口点,在内核地址空间执行,需要在用户空间和内核上下文环境间切换,开销较大。一般没有 库函数对文件的操作实际上是通过系统调用来实现的,因此使用库函数也有系统调用的开销。为什么不直接使用系统调用呢?因为读写文件通常是大量的数据(相对于底层驱动的系统调用所实现的数...
2018-07-15 22:39:04
1818
原创 列出常见的信号,信号怎么处理?
1、常见的信号信号(signal)是很短的信息,可以被发送到一个进程或一组进程,发送给进程的唯一信息通常是一个数,以此来表示信号。信号的两个主要目的:让进程知道已经发生了一个特定的事件;强迫进程执行它自己代码中的信号处理程序。$ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABR...
2018-07-15 22:37:01
2167
原创 进程、线程、多进程、多线程
一、进程和线程的区别(1)进程:资源分配的最小单位;线程:程序执行的最小单位(CPU调度和分派的基本单位)。(2)进程有独立的地址空间,每个进程都有自己的数据段、代码段和堆栈段;线程没有单独的地址空间,它包含独立的栈和CPU寄存器(同一进程内的线程共享进程的地址空间)。(3)一个进程崩溃后,在保护模式下不会对其它进程产生影响;一个线程死掉就等于整个进程死掉。(4)进程之间的通信只能通过进程通信的方...
2018-07-15 22:34:35
431
原创 如何定位内存泄漏
常见的内存错误:(1)内存分配未成功,却使用了它(2)内存分配成功,但尚未初始化就引用它(3)内存分配成功且初始化,但操作越过了内存的边界(4)忘记释放内存,造成内存泄漏(5)释放了内存却继续使用它以发生的方式来分类:(1)常发性内存泄漏,发生内存泄漏的代码会被多次执行到,每次执行都会导致一块内存泄漏(2)偶发性内存泄漏(3)一次性内存泄漏,发送泄漏的代码只会被执行一次(4)隐式内存泄漏,程序在运...
2018-07-15 22:24:00
12809
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人