文件描述符

网络IO

匿名 (未验证) 提交于 2019-12-02 23:56:01
大并发服务器设计目标 高性能(High Performance). 要求编写出来的服务器能够最大限度发挥机器性能, 使得机器在满负荷的情况下能够处理尽可能多的并发请求, 对于大量并发请求能够及时快速做出响应 高可用(High Availability). 要求服务器7*24小时服务, 故障转移 伸缩性(Scalability). 服务器具有良好框架, 分层设计, 业务分离, 并且能够进行灵活部署 分布式: 负载均衡 分布式存储 分布式计算 C/S结构: 任何网络系统都可以抽象为C/S结构(客户端, 服务端) 网络I/O+服务器高性能编程技术+数据库 超出数据库连接数: 数据库并发连接数10个, 应用服务器这边有1000个并发请求, 将会有990个请求失败. 解决办法: 增加一个中间层DAL(数据库访问控制层), 一个队列进行排队 超出时限: 数据库并发连接数10个, 数据库1秒钟之内最能处理1000个请求, 应用服务器这边有10000个并发请求, 会出现0-10秒的等待. 如果系统规定响应时间5秒, 则该系统不能处理10000个并发请求, 这时数据库并发能力5000, 数据出现瓶颈. 提高数据库的并发能力 队列+连接池(DAL) 主要逻辑挪到应用服务器处理, 数据库只做辅助的业务处理. 在数据库上进行计算能力或处理处理逻辑不如操作系统效率高. --> 很有限降低数据库的压力,

不小心执行了rm -rf,恢复方法

匿名 (未验证) 提交于 2019-12-02 23:55:01
前言: 每当我们在生产环境服务器上执行rm命令时,总是提心吊胆的,因为一不小心执行了误删,然后就要准备跑路了,毕竟人不是机器,更何况机器也有 bug,呵呵 模拟场景:   一、删除    误删除服务器目录/root/selenium/Spider下的MySql.Data.dll文件   rm -f /root/selenium/Spider/MySql.Data.dll   ll /root/selenium/Spider/MySql.Data.dll    ls: cannot access /root/selenium/Spider/MySql.Data.dll: No such file or directory    二、恢复 (1)、使用 lsof 命令查看当前是否有进程打开 /root/selenium/Spider/MySql.Data.dll文件:   lsof | grep /root/selenium/Spider/MySql.Data.dll 从上面可以看出,当前文件状态为已删除(deleted)。 (2)、查看是否存在恢复数据:   /proc/13067/fd:进程操作的文件描述符目录。   86:文件描述符。  cat /proc/13067/fd/86  (3)、使用I/O重定向恢复文件     cat /proc/23778/fd/86 >

I/O多路复用

匿名 (未验证) 提交于 2019-12-02 23:51:01
1、使用场景   IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。IO多路复用适用如下场合:   (1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/O复用。   (2)当一个客户同时处理多个套接口时,而这种情况是可能的,但很少出现。   (3)如果一个TCP服务器既要处理监听套接口,又要处理已连接套接口,一般也要用到I/O复用。   (4)如果一个服务器即要处理TCP,又要处理UDP,一般要使用I/O复用。   (5)如果一个服务器要处理多个服务或多个协议,一般要使用I/O复用。   与多进程和多线程技术相比,I/O多路复用技术的最大优势是系统开销小,系统不必创建进程/线程,也不必维护这些进程/线程,从而大大减小了系统的开销。 不同IO模式比较: select poll 移植性好,但单进程监视的文件数过多会性能不佳,不适合用于大并发 select的问题: (1)被监控的fds集合限制为1024 (2)fds集合需要从用户空间拷贝到内核空间 (3)当被监控的fds中某些有数据可读的时候,无法直接从通知中得到有可读事件的fds列表,而需要遍历整个fds来收集 poll使用pollfd结构而不是select的fd_set结构,解决问题(1) 水平触发,边缘触发:通知进程的方式 1. LTģʽ LT(level triggered

【I/O多路复用】epoll系统调用

匿名 (未验证) 提交于 2019-12-02 23:49:02
版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 ( Creative Commons ) 文章目录 【1】epoll相关的系统调用 epoll_create() epoll_ctl() epoll_wait() 【2】代码示例 【1】epoll相关的系统调用 epoll是Linux特有的I/O复用函数。它在实现和使用上与select、poll有很大差异。 首先 , epoll使用一组函数来完成任务 ,而不是单个函数。 其次 , epoll 把用户关心的文件描述符上的事件放在内核里的一个事件表中 ,从而无须像select和poll那样每次调用都要重复传人文件描述符集或事件集。 但是 epoll需要使用一个额外的文件描述符,来唯一标识内核中的这个事件表。 epoll_create() 这个文件描述符使用如下epoll create函数来创建: # include <sys/epoll.h> int epoll_create ( int size ) 其中 size参数现在并不起作用,只是给内核一个提示,告诉它事件表需要多大。 返回值 该函数返回一个文件描述符,用作其他所有epoll系统调用的第一个参数,用来指定要访问的内核事件表。 epoll_ctl() # include <sys/epoll.h> int epoll_ctl ( int

UNIX文件系统

匿名 (未验证) 提交于 2019-12-02 23:47:01
在linux系统中―― 一切都是文件。 1. 磁盘物理结构 磁盘的物理结构如下: 磁盘的最小组成单位可以看成扇区,每个扇区的大小逻辑上看起来是512字节,但实际上底层的物理扇区是4096字节,可以通过如下方式去得到: gqx@gqx-Lenovo-Product:~$ sudo fdisk -l Disk /dev/sda: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes 由于扇区太小了,如果实际操作的时候按扇区为单位去读写数据的效率比较低,就比如10M的文件,磁头就需要读取(1024*10/512)20480次移动操作,所以一般都是用块(多个扇区)这个逻辑概念来实现具体的读写操作,一个块的大小通常是4096个字节: gqx@gqx-Lenovo-Product:~$ sudo tune2fs -l /dev/sda4 | grep "Block size" Block size: 4096 2. 文件系统的结构

文件描述符

匿名 (未验证) 提交于 2019-12-02 23:34:01
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/millions_02/article/details/90475141 文件描述符 概念 描述符是一个打开文件的索引,找到文件描述表,再找到i-node表 修改限制 文件描述符也是一种资源,像端口一样,也有数量限制 修改限制 1.查看限制 1.ulimit -n 用户级别查看 2.sysctl -a | grep -i file-max --color; 系统级别查看 1.临时修改 ulimit -SHn 65535 用户级别修改 sysctl -w fs.file-max= 65535 2.永久修改 /etc/security/limits.conf 最后一行加入 * - nofile 65535 用户级别修改 /etc/sysctl.conf 加入 fs.file-max=65535 然后执行 sysctl -p 系统级别修改 to mandy open files Too many open files” , 可以通过增大进程可用的文件描述符数量来解决,但往往故事不会这样结束,很多时候,并不是因为进程可用的文件描述符过少,而是因为程序bug,打开了大量的文件连接(web连接也会占用文件描述符)而没有释放。程序申请的资源在用完后及时释放,才是解决“Too many open

SylixOS I/Oϵͳ

匿名 (未验证) 提交于 2019-12-02 22:56:40
概述 I/O 系统又称作输入输出系统, SylixOS兼容POSIX标准输入输出系统,SylixOS的I/O概念继承了UNIX操作系统的I/O概念,认为一切皆为文件。与UNIX操作系统相同, SylixOS中的文件也分为不同的类型。 SylixOS的I/O系统结构,分为ORIG驱动结构和NEW_1驱动结构。NEW_1驱动结构就是在ORIG驱动结构基础上增加了设备节点结构,其负责文件访问权限、文件记录锁等功能。图1.1为两种驱动结构的对比图。 图1.1 ORIG驱动结构和NEW_1驱动结构对比图 关键结构体 程序清单2.1 文件节点 typedef struct { LW_LIST_LINE FDNODE_lineManage; / 同一设备 fd_node 链表 / LW_OBJECT_HANDLE FDNODE_ulSem; / 内部操作锁 / dev_t FDNODE_dev; / 设备 / ino64_t FDNODE_inode64; / inode (64bit 为了兼容性) / mode_t FDNODE_mode; / 文件 mode / uid_t FDNODE_uid; / 文件所属用户信息 / gid_t FDNODE_gid; off_t FDNODE_oftSize; / 当前文件大小 / struct __fd_lockf FDNODE

Python实现整蛊、木马等黑客软件!

匿名 (未验证) 提交于 2019-12-02 22:56:40
考虑一下利用Python制作一个整蛊、木马软件,我提供思路。(清楚到没学过编程的人也理解) 1、首先一个黑客做一个整蛊或者木马软件,一定不会让你能够关闭它。 2、里面经常会附带欺骗的方法。 3、最终实现某种目的。 前段时间在抖音上看到个有趣的程序,看样子是VB写的,首先就要用到欺骗的方法,利用软件名称欺骗目标点击软件,打开后出现一个标签、两个按钮。 标签上写的是:我爱你,你爱我吗? 按钮:一个写爱,一个是不爱。 怎么办?一般人看到这种情况就直接点叉关闭软件了。然而人家程序员早就在代码里写了 窗口关闭 = 假 了。 所以没办法,点个按钮看看,当目标点 不爱_按钮 的时候,是点不中的,鼠标动的同时,按钮也在动。就是你怎么也点不中它,因为别人调用模块写好了按钮坐标跟随鼠标移动。 没办法了,点击爱的按钮吧,反正也没人知道我点了。嗯,也许你可以碰到好人,是你对象。点击 爱_按钮 会出现窗口销毁。有些人专门整蛊,点击 爱_按钮 立马弹出 消息框 = “你又上当了”,立马电脑就出现关机界面(当然你可以加闹钟延时啥的)。别人在就按钮里写好了触发关机的代码。 这样的一个思路,我昨天已经用Python写出来了,当然是整蛊类型的。如果说你是想玩木马也不是不可以,需要再发挥一些思路,但是你玩是你的事,本人分享的编程知识仅供正当的参考学习。 是不是还差点什么?是的,有些人会打开任务管理器点击关闭进程。所以

python3--文件流,序列化,反序列,os

匿名 (未验证) 提交于 2019-12-02 22:54:36
1.文件流: 以只读方式打开文件。 打开一个文件只用于写入。文件已存在则将其覆盖。文件不存在,则创建新文件。 可读取,可写入 2.pickle 的 pickle 模块实现了基本的数据序列和反序列化。 : 将程序中运行的对象信息保存到文件中去,永久存储。 : 从文件中创建上一次程序保存的对象。 对象以读取的的形式打开 file 文件: x = pickle.load(file) 3.os模块: os.rename(src, dst):重命名文件或目录,从src 到 dst os.mkdir(path[, mode]):创建一个名为path的文件夹 os.write(fd, str):写入字符串到文件描述符fd中. 返回实际写入的字符串长度 os.chmod(path, mode):更改权限 os.close(fd):关闭文件描述符 fd os.read(fd, n):从文件描述符 fd 中读取最多 n 个字节,返回包含读取字节的字符串 os.open(file, flags[, mode]):打开一个文件, os.dup(fd):复制文件描述符 fd os.dup2(fd, fd2):将一个文件描述符 fd 复制到另一个 fd2 文章来源: python3--文件流,序列化,反序列,os

Socket 编程介绍

谁说胖子不能爱 提交于 2019-12-02 22:52:57
Socket 编程发展 Linux Socket 编程领域,为了处理大量连接请求场景,需要使用非阻塞 I/O 和复用。select、poll 和 epoll 是 Linux API 提供的 I/O 复用方式,自从 Linux 2.6 中加入了 epoll 之后,高性能服务器领域得到广泛的应用,现在比较出名的 Nginx 就是使用 epoll 来实现 I/O 复用支持高并发,目前在高并发的场景下,Nginx 越来越收到欢迎。 据 w3techs 在 2015 年 8 月 10 日的统计数据表明,在全球 Top 1000 的网站中,有 43.7% 的网站在使用 Nginx,这使得 Nginx 超越了 Apache,成为了高流量网站最信任的 Web 服务器足足有两年时间。已经确定在使用 Nginx 的站点有:Wikipedia,WordPress,Reddit,Tumblr,Pinterest,Dropbox,Slideshare,Stackexchange 等,可以持续罗列好几个小时,他们太多了。 下图是统计数据: select 模型 下面是 select 函数接口: int select (int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); <br> select