自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 收藏
  • 关注

原创 微信渐变国旗头像来了!一键生成

微信渐变国旗头像来了!一键生成

2022-09-19 21:25:20 772 1

原创 Linux 进程管理之进程调度与切换

进程调度相关内核结构我们知道,进程运行需要各种各样的系统资源,如内存、文件、打印机和最宝贵的 CPU 等,所以说,调度的实质就是资源的分配。系统通过不同的调度算法(Scheduling Algorithm)来实现这种资源的分配。通常来说,选择什么样的调度算法取决于资源分配的策略(Scheduling Policy)。有关调度相关的结构保存在 task_struct 中,如下:struct task_struct {/* task_struct 采用了如下3个成员表示进程的优先级,prio、nor

2022-01-27 11:16:43 1749

原创 Linux 进程管理之 CFS 调度策略

CFS 原理CFS(Completely Fair Scheduler), 也即是完全公平调度器。CFS 的产生就是为了在真实的硬件上模拟“理想的多任务处理器”,使每个进程都能够公平的获得 CPU。CFS 调度器没有时间片的概念,CFS 的理念就是让每个进程拥有相同的使用 CPU 的时间。比如有 n 个可运行的进程,那么每个进程将能获取的处理时间为 1/n。在 CFS 调度器中引用权重来代表进程的优先级。各个进程按照权重的比例来分配使用 CPU 的时间。比如2个进程 A 和 B, A 的权重为 1

2022-01-27 11:13:31 2457

原创 Linux 系统调用的执行过程

什么是系统调用系统调用 (在 Linux 中常称为 syscalls ) 是应用程序访问硬件设备之间的桥梁。系统调用层为用户空间提供一种硬件的抽象接口,使得用户不用关注设备的具体信息,同时系统调用保证了系统的稳定和安全。在 Linux 中,除了异常和陷入外,系统调用是用户空间访问内核的唯一手段。实际上,其他的像设备文件和 /proc 之类的方式,最终也还是要通过系统调用的方式进行访问。系统调用号在 Linux 中,每个系统调用被赋予一个系统调用号。通过这个独一无二的调用号就可以关联具体的系统调

2022-01-27 11:11:38 3697

原创 网络排错大讲解

文章来源:https://blog.csdn.net/weixin_40274679/article/details/1059263421 网络排错的必备条件为什么要先讲必备条件?因为这里所讲的网络排错并不仅仅是停留在某一个小小命令的使用上,而是一套系统的方法,如果没有这些条件,我真的不能保证下面讲的这些你可以听得懂,并且能运用到实际当中,所以还是先看看这些基础的条件吧。1.1 熟悉OSI七层模型与TCP/IP协议栈这应该是网络排错要知道的最基本的知识了。无论是OSI七层模型还是DoD模型,都是用

2021-12-30 17:51:48 176

原创 手把手教你给 SSH 启用二次身份验证

目前来说,二次验证是比较常用的安全手段,通过设置二次验证,就可以有效的避免账户密码的泄露导致的安全问题。因为,每次登陆前都需要获取一次性验证码,如果没有验证码的话就无法成功登陆。1、安装 PAM 模块#时间与客户端进行校验$ ntpdate pool.ntp.orgUbuntu$ sudo apt install -y libpam-google-authenticatorCentOS7$ yum install -y epel-release$ yum install -y google-

2021-12-29 14:54:00 1868

原创 Linux 故障排查-测试网络端口连通性

1、telnet 方法telnet 协议是 TCP/IP 协议族中的一员,是 Internet 远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。因此我们可以使用telnet 来测试远程机器的连通性。telnet 软件包安装1、检测 telnet 包是否安装rpm -qa | grep telnet2、未安装,则安装 telnet 软件包yum install telnet3、检测安装包是否安装成功rpm -qa | grep telnettelnet

2021-12-29 14:45:54 9746

原创 Linux ‘网络配置’ 和 ‘故障排除’ 命令总结

1.ifconfigifconfig命令 被用于配置和显示Linux内核中网络接口的网络参数。用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了。ifconfigeth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 172.24.186.123 netmask 255.255.240.0 broadcast 172.24.1

2021-12-28 18:42:29 1680

原创 Linux 进程管理之基础知识

task_struct 结构描述在 Linux 中每个进程都是由一个 task_struct 结构来进行描述的。通常我们常说的 PBC (进程控制块)就是指 task_struct。task-struct 结构包含了进程的所有信息,它是系统对进程进行控制的有效手段。task_struct 结构进行具体描述如下struct task_struct {/* 进程执行时,它会根据具体情况改变状态,Linux 中的进程主要有如下状态 TASK_RUNNING 可运行 TASK_INTERRU

2021-12-28 18:38:27 586

原创 Centos7 开启 iptables 日志

Netfileter/iptables (以下简称iptables)是unix/linux 系统自带的优秀且完全免费的基于包过滤的防火墙工具、它的功能十分强大、使用非常灵活、可以对流入、流出及流经服务器的数据包进行精细的控制。在生产环境中有时候需要对指定的数据包进行过滤,但是在复杂的网络环境中,有时会出现收不到正常的数据报文,这时可能需要查看数据报文有没有被iptables进行过滤掉而导致收不到报文。下面的方法是通过怎么开启iptables日志进行查看数据报文情况。1、在rsyslog.conf 中添

2021-12-28 18:36:33 2313

原创 Linux 进程管理之进程、线程

进程创建Unix 中关于进程的创建分为2个步骤:fork() 和 exec() (这里 exec 指 exec一系列函数,因为内核实现了多个函数,比如 execv 等)。fork() 调用是通过拷贝当前进程来创建子进程。此时父子进程的区别在于pid(本进程号),ppid(父进程号)和一些资源和统计量。exec() 函数用于加载可执行文件开始运行。以上2个函数完成了进程的创建过程。创建进程(线程)的方式有3种:fork()、vfork()、clone()。fork 原理有关 fork 的系统调用

2021-12-28 18:33:52 391

原创 Linux 进程管理之进程的终结

当一个进程终结时,内核必须释放掉它所占有的资源并把这一终结事件告知父进程。进程的终结大部分都要靠 exit() 来完成的,最终的系统调用为 do_exit()。asmlinkage long sys_exit(int error_code){do_exit((error_code&0xff)<<8);}/当cpu进入到do_exit后,当前进程就会在中途寿终正寝,不会从这个函数中返回,当然也就不会从sys_exit中返回,从而也就不会从系统调用exit()中返回/fast

2021-12-28 18:19:22 387

原创 linux ulimit 调优

在 Linux 系统中,在每个进程中都有一组资源限制,进程默认打开的最大文件数个数为 1024 个,可以通过如下配置查看:#ulimit -n1024在应用程序开发过程中,比如向 server 发起连接的客户端超过 1024 个时,server 由于 1024 个最大的文件个数限制而出现打开文件失败,进而出现Too many open files 错误。在linux中这些限制是分为软限制 (soft limit) 和 硬限制 ( hard limit )。他们的区别就是软限制可以在程序的进程中自行改

2021-12-16 14:28:44 1811

原创 memcache 多线程模型

memcache 网络模型采用的是单进程多线程模型,内部使用 libevent 事件库来处理网络请求。其工作模式是主线程负责 accept 新的客户端连接请求,然后把获取到的新的连接请求经过 Round Robin 方式分配各个 worker 线程,worker 线程负责处理请求。线程对象类型如下typedef struct {pthread_t thread_id; /* unique ID of this thread */struct event_base base; /

2021-12-16 14:25:10 906

原创 redis 多线程实现原理

从redis6.0开始,redis中开始新增了支持多线程。Redis基于Reactor模式开发了网络事件处理器。当有客户端连接请求时,主线程接收并解析请求,然后执行命令处理请求,最后把结果返回给客户端。这个流程都是主线程在处理,所以在 redis6.0 以前都是单线程的。对于 redis 性能来讲,其性能不在 cpu,而在于内存和网络。redis 的存在就是为了做缓存,因此系统搭建采用 redis 的话,一般内存是足够的,若不够,可以加大内存或者优化数据结构能方式进行优化。因此,网络优化对于 redi

2021-12-07 15:51:51 2591

原创 Linux GDB的实现原理

在开发过程中我们都会使用 gdb 进行调试程序,那么当我们使用 gdb 进行调试程序的时候,底层发生了什么?今天通过分析 ptrace 系统调用来分析下 gdb 的底层实现原理。ptrace 是什么ptrace 是操作系统提供的一个用于跟踪进程的系统调用。通过 ptrace 系统调用可以获取被跟踪进程的进程状态。比如我们常用的获取可执行文件执行时都进行了哪些系统调用的 strace 命令和我们常使用的调试工具 gdb 等,他们都是通过使用 ptrace 进行实现的。在使用 gdb 进行本地跟踪某个

2021-12-07 15:49:55 1071

原创 ptrace

#include <stdio.h>#include <sys/ptrace.h>#include <unistd.h>#include <stdlib.h>#include <sys/wait.h>#include <sys/reg.h>int main(int argc, char *argv[]){pid_t pid = fork();if(pid < 0){printf(“fork failed\n”

2021-12-06 15:20:27 117

原创 60秒内对 Linux 进行性能诊断

作者:胡明链接:http://r6d.cn/DvAL当你发现 Linux 服务器上的系统性能问题,在最开始的 1 分钟时间里,你会查看哪些系统指标呢?Netflix 在 AWS 上有着大规模的 EC2 集群,以及各种各样的性能分析和监控工具。比如我们使用 Atlas 来监控整个平台,用 Vector 实时分析 EC2 实例的性能。这些工具已经能够帮助我们解决大部分的问题,但是有时候我们还是要登录进机器内部,用一些标准的 Linux 性能分析工具来定位问题。在这篇文章里,Netflix 性能工程团队会

2021-12-04 17:38:56 432

原创 你需要了解的55个网络概念

来源:SDNLAB5G5G,第五代移动通信技术(5th Generation Mobile Communication Technology)是具有高速率、低时延和大连接特点的新一代宽带移动通信技术,是实现人机物互联的网络基础设施。网络切片网络切片可以有效利用运营商的无线容量,制定符合客户需求的5G虚拟网络。Open RAN (O-RAN)O-RAN是一项无线行业倡议,旨在使用软件定义的技术和通用、供应商中立的硬件设计和构建5G无线接入网络。数据中心数据中心是企业用来存放关键业务应用程序和信

2021-12-04 17:35:57 4656

原创 非阻塞的connect使用方式

connect 函数的调用涉及到3次握手,默认connect函数为阻塞连接状态。 通常connect 会阻塞到三次握手的完成和失败,而这个connect阻塞超时时间会依赖于系统,一般为75s到几分钟时间。一种方式可以通过该系统配置/proc/sys/net/ipv4/tcp_syn_retries,默认为6,可以改为3等。对于不通过修改配置想要缩短这些超时时间的场景,一般可以采用非阻塞的connect进行连接。当把一个TCP套接字设置为非阻塞后调用connect,connect会立即返回。当连接建立

2021-12-01 09:24:59 2305

原创 进程间通信(IPC) 系列 | mmap

什么是 共享内存共享内存区是把文件或者内存对象映射到多个进程的虚拟地址空间中,这样这些进程可以共享这些数据。但是从这些共享的内存区写入或者读取时通常需要某种形式的同步。当这种映射关系建立起来后,进程可以不再通过执行任何进入内核的系统调用就可直接操作这些内存区。共享内存是IPC形式中最快的一种方式。mmap操作接口#include <sys/mman.h> void* mmap(void *addr, size_t len,int prot, int flags, int fd, off_

2021-11-25 10:39:59 454

原创 Linux 文件系统之 MINIX 文件系统

MINIX 文件系统与标准 UNIX 的文件系统基本相同,它由 6 个部分组成:①引导块;②超级块;③ i 节点位图;④逻辑块位图;⑤i 节点;⑥数据块。对于一个普通的磁盘块设备来说,其各部分的分布见下图:整个块设备被划分成以 1KB 为单位的磁盘块。引导块是计算机加电启动时可由 ROM BIOS 自动读入的执行代码和数据盘块。但一个系统中并非所 有盘设备都用于作为引导设备,所以对于不用于引导的盘片,这一盘块中可以不含代码。但任何盘块设 备必须含有引导块空间,以保持 MINIX 文件系统格式的统一。即

2021-11-24 17:04:37 2059

原创 Linux文件系统之文件类型、属性和目录项

UNIX 类操作系统中的文件通常可分为 6 类:①正规文件;②目录名;③符号链接文件;④命名管 道文件;⑤字符设备文件;⑥块设备文件。如果在 shell 命令行提示符下执行"ls -l"命令,我们就可以 从列出的文件状态信息中知道文件的类型,见下图:图中,命令执行后所显示的文件信息的第一个字符即表示所列文件的类型。例如图中的 ‘-’ 表示该 文件是一个正规(一般)文件。正规文件(’-’)是一类文件系统对其不作解释的文件,可包含有任何长度的字节流。例如源程序文 件、二进制执行文件、文档以及脚本文件。目

2021-11-24 16:58:00 1414

原创 微信昵称也可以这样玩!!!

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2021-10-19 22:29:25 131

原创 使用 -Wl,rpath设置动态库的指定搜索路径

工作中有时会遇到可执行程序运行时使用指定目录下的动态库,若是直接修改环境变量,可能会对其他程序产生影响,因此可以在编译时使用-Wl,rpath来指定运行时路径。比如 /home/lib 下存在 libtest.so , /home/test 下存在 test.c 和 libtest.so文件,编译出的可执行文件依赖动态库 libtest.so/home |--lib -libtest.so |--test - test.c - libtest.so

2021-10-19 21:53:48 1863

原创 进程间通信(IPC) 系列 | Posix 消息队列

消息队列是 Linux IPC 中很常用的一种通信方式,今天分析一下Posix消息队列,本文中所讲的消息队列均为Posix消息队列。什么是 Posix 消息队消息队列可以认为它是一个消息链表,有足够写权限的进程可以往队列中发送消息,有足够读权限的进程可以往队列中接收消息。每个消息都是一个记录,它由发送者赋予一个优先级。在某个进程往一个队列写入消息之前,并不需要另外某个进程在该队列上等待消息的到达。这也就说明消息队列具有随内核的持续性,也就是说进程关闭后,消息队列依然存在,除非内核重新自举。Pos..

2021-10-19 21:44:38 1126

原创 负载均衡原理及实现

什么是负载均衡?负载均衡( LoadBalance ),顾名思义就是把任务压力进行平衡的分摊到集群中各个操作单元(或机器)上,使得避免集群中部分机器压力过大而部分机器过于空闲。经过负载均衡,使得每个机器获取适合自己的处理能力负载。负载均衡分类负载均衡可分为硬件负载均衡和软件负载均衡。硬件负载均衡比如F5、NetScaler等价格比较昂贵,一般开发中很难接触到。但软件负载均衡还是很容易接触到的,比如大家常见的Nginx、LVS等。软件负载均衡又可以分为四层负载均衡和七层负载均衡。所谓四层负载均衡就

2021-10-19 16:04:38 3483

空空如也

空空如也

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

TA关注的人

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