美国Linux服务器即使安全系数很高,在长时间的运行过程中也会难免出现一些安全风险,因此美国Linux服务器用户在日常操作中就需要注意防止安全风险,本文小编就来分享下美国Linux服务器系统优化的方法。, 1、撤消美国Linux服务器非必要的服务项目,一般除HTTP,smtp,telnet和ftp以外,其余的服务项目如简易的文件传送协议书tftp,web电子邮件储存、接受用以搜索和检索gopher Time应用的数据信息的imap / ipop传输协议同歩和时间等都可以进行撤销。, 2、因为美国Linux 服务器开源的特点,经常会发布升级程序流程和漏洞补丁,为了更好地提升系统软件安全系数,美国Linux服务器管理人员务必及时更新系统、打补丁修补漏洞核心。, 3、查验账户密码安全性是美国Linux服务器重要的安全防范措施,如果用户登陆密码过于简单会非常容易被黑客破解,尤其是有重要权限的用户,万一被黑客入侵则会导致严重的系统软件网络安全问题。, 4、设定美国Linux 服务器管理员账户的安全等级除登陆密码以外,管理员账户还需要具备不同安全等级,美国Linux 服务器每一个帐户都能够得到不同的管理权限,因而创建新用户ID时需要设置合理的管理权限。, 5、限定Root用户的管理权限也是美国Linux服务器维护的关键之一,因为Root用户有最高权利,因此最好不要轻易受权。而有些程序流程务必须使用Root用户权限开展的,可以使用专用工具Sudo授权其他用户部分的管理权限。, 6、使用安全工具SSH密钥登录,SSH是安全性套接字层,是一组能够安全的更换rlogin,rsh和rcp等实用程序的美国Linux服务器程序流程。SSH应用公匙技术性数据加密互联网上两部服务器中间的通讯信息内容,并应用其密匙做为身份认证。, 以上就是美国Linux 服务器系统安全优化的一些方法,希望能帮助各位美国Linux服务器用户更好地防护网络安全。, 现在vsping科技合作的美国VM机房的美国Linux服务器所有配置都免费赠送防御值 ,可以有效防护网站的安全,以下是部分配置介绍:,, 美国Linux服务器即使安全系数很高,在长时间的运行过程中也会难免出现一些安全风险,因此美国Linux服务器用户在日常操作中就需要注意防止安全风险,本文小编就来分享下美国Linux服务器系统优化的方法。, 1、撤消美国Linux服务器非必要的服务项目,一般除HTTP,smtp,telnet和ftp以外,其余的服务项目如简易的文件传送协议书tftp,web电子邮件储存、接受用以搜索和检索gopher Time应用的数据信息的imap / ipop传输协议同歩和时间等都可以进行撤销。,
美国Linux服务器系统提供了更为灵活和精细化的文件系统安全权限控制的特点,是美国Linux服务器系统众多优点中主要的一部分,同时也意味着美国Linux服务器系统的用户理解系统的安全权限也是至关重要的。今天小编就是为初学者介绍美国Linux服务器系统权限的基本知识。, 在开始美国Linux服务器系统权限的介绍之前,先假设新建一个目录,使用 cd 命令可以进入这个目录,然后使用 ls -l 命令来查看该目录安全管理权限信息。, 如果想以时间为序排列,加上 -t 选项:ls –lt,但因为这一新建目录下没有文件,所以这一命令执行不会返回结果。现在创建两个名为 cat.txt 和 dog.txt 的空白文件,这一步可使用 touch 命令将更为便捷,然后继续使用 mkdir 命令创建另一个空目录。现在可以再次使用ls -l命令查看这些新文件的权限,然后需要留意这个命令输出结果的两个部分。, 1 、权限的拥有者, 首先要注意的是具有访问文件/目录的权限的用户,美国Linux服务器用户的类型主要有三种:用户、组和其他人,其他人的本质上既不是用户也不是组,还有一个全部,意思是几乎所有人。, 如果使用 root 作为当前用户,那么可以访问美国Linux服务器任何文件或目录,因为 root 是超级用户。而通常情况下用户可能是用被限定的普通用户登录。所有的美国Linux服务器用户都存储在 /etc/passwd 文件中,【组】的相关信息保存在 /etc/group 文件中。, 2 、权限的具体范围, 使用 ls -l 命令输出的结果另一部分与美国Linux服务器执行权限有关,以上查看了创建的 dog.txt 和 cat.txt 文件以及 Pets 目录的所有者和组权限都属于 root 用户,可以通过这一信息了解到不同用户组所拥有的相应权限。, 可以把每一行分解成五部分。第一部分标志着它是文件还是目录:文件用 -(连字符)标记,目录用 d 来标记。接下来的三个部分分别是用户、组和其他人的对应权限。最后一部分是访问控制列表(ACL)的标志,是记录着特定用户或者用户组对该文件的操作权限的列表。, 美国Linux服务器系统权限的级别可以用字母或数字标识,总共有三种权限类型:, 可读取:r 或 4, 可写入:w 或 2, 可执行:x 或 1, 每个字母符号r、w 或 x表示有该项权限,而 – 符号表示无该项权限。, 以上就是美国Linux服务器系统权限的基本知识介绍,希望可以帮助到有需要的美国Linux服务器系统的初学用户。, 现在vsping科技合作的美国VM机房的美国Linux服务器所有配置都免费赠送防御值 ,可以有效防护网站的安全,以下是部分配置介绍:,, , , 美国Linux服务器系统提供了更为灵活和精细化的文件系统安全权限控制的特点,是美国Linux服务器系统众多优点中主要的一部分,同时也意味着美国Linux服务器系统的用户理解系统的安全权限也是至关重要的。今天小编就是为初学者介绍美国Linux服务器系统权限的基本知识。, 在开始美国Linux服务器系统权限的介绍之前,先假设新建一个目录,使用 cd 命令可以进入这个目录,然后使用 ls -l 命令来查看该目录安全管理权限信息。,
美国Linux服务器开源而不断发展,所以美国Linux服务器所能够支持的文件系统类型也在迅速扩充。伴随着不同新版本的美国Linux服务器系统的发行,也出现了大量的文件系统可能性,其中每个不同版本的Linux所支持的文件系统类型种类都有所不同。, 基于Linux开放源码的特性,美国Linux服务器系统中也划分着针对不同的用户群。 Linux本身只是一个内核,在Linux内核的基础上进行开发的那些系统都统称为Linux操作系统的发行版本。本文小编就介绍下美国Linux服务器系统主流的发行版本。, 1、Ubuntu, 美国Linux服务器的Ubuntu发行版本是历史比较久的发行版之一,基于Debian版本开发的。, 优点:系统成熟,应用广泛,软件数量多,社区支持完善, ASK UBUNTU社区里大部分问题都能得到解答。, 缺点:桌面性能低,稳定性低,内置无用软件,需要美国Linux服务器自己打造成适合的系统,使用体验的负面影响比较大。, 2、Linux Mint, Mint是一个在排行榜上长期保持第一的发行版,是Ubuntu的衍生版本。, 优点:符合Windows用户的操作习惯,具有更新管理器、开始菜单、Office等用户等Windows功能,系统完善。, 缺点:软件库数量少,部分不常见的美国Linux服务器软件需要从源码编译,没有集成wine。, 3、Manjaro, Manjaro是基于Arch的新兴操作系统,美国Linux服务器发行版排行榜中先居第二。, 优点:软件库数量多,易用性高,简洁性高,提供直接可用的QQ软件。, 缺点: arch系的通性弱,滚动更新的方式体验感差。, 4、Solus, Solus没有基于别的发行版,属于从无到有的美国Linux服务器系统建构版本。, 优点:简洁快速,开机速度快。设计概前卫,没有冗余代码的问题,管理器安装应用速度非常快。, 缺点:对驱动的支持不好,软件库数量少。, 5、Arch Linux, Arch是加拿大的独立发行版,以面向进阶美国Linux服务器用户与高度定制性著称。, 优点:庞大的软件库,使用包管理器可以安装大部分软,中文文档完善,定制化程度很高,多余的软件少,支持安装QQ软件。, 缺点:定制化程度太高,安装难度高,不适合新手,驱动、桌面环境、应用管理器等需要自己手动敲命令下载,滚动更新体验差。, 6、puppy Linux, 360急救盘就是基于它而定制的版本。, 优点:资源小,支持在64M存储设备启动,整套美国Linux服务器系统都能在内存中运行,可当 U盘应急系统。, 缺点:没有包管理器,需要从源码编译应用安装新软件。, 7、Debian, Debian是历史很悠久的美国Linux服务器系统版本,几乎60%的Linux发行版都由它衍生而来。, 优点:精简而稳定, deb包高度集中,依赖性问题少,拥有最大的支持社区。, 缺点:没有专业的技术支持,更新周期很长,软件库软件老旧。, 8、Lubuntu, Lubuntu是Ubuntu快速、轻量级且节省能源的变体,旨在面向低资源配置的美国Linux服务器系统。, 优点:轻快简洁。, 缺点:不支持太多老旧版本。, 9、Deepin, 国内美国Linux服务器操作系统中排名最高的一个,基于Debian开发。, 优点:易用、美观、完善,提供Windows体验,自主开发Deepin桌面环境支持提供QQ软件,是一个非常适合于国人的操作系统。, 以上内容就是关于美国Linux服务器系统主流发行版的介绍,有部分小编没有亲自体验过,因此评论可能并非完全客观,但在选择美国Linux服务器发行版时也是不错的参考标准。, 现在vsping科技合作的美国VM机房的美国Linux服务器所有配置都免费赠送防御值 ,可以有效防护网站的安全,以下是部分配置介绍:,, , 美国Linux服务器开源而不断发展,所以美国Linux服务器所能够支持的文件系统类型也在迅速扩充。伴随着不同新版本的美国Linux服务器系统的发行,也出现了大量的文件系统可能性,其中每个不同版本的Linux所支持的文件系统类型种类都有所不同。, 基于Linux开放源码的特性,美国Linux服务器系统中也划分着针对不同的用户群。 Linux本身只是一个内核,在Linux内核的基础上进行开发的那些系统都统称为Linux操作系统的发行版本。本文小编就介绍下美国Linux服务器系统主流的发行版本。, 缺点:定制化程度太高,安装难度高,不适合新手,驱动、桌面环境、应用管理器等需要自己手动敲命令下载,滚动更新体验差。
美国Linux服务器系统中每个文件或目录都有特定的访问权限,文件和目录的访问权限同样都分为三种,包括只读,只写和可执行,美国Linux服务器用户根据需要的访问权限可以将其设置为需要的类型。本文小编就来介绍下美国Linux服务器修改系统文件权限的方式。, 美国Linux服务器每一文件或目录的访问权限都有三组,每组用三位表示,分别为文件属主的读、写和执行权限;与属主同组的用户的读、写和执行权限;系统中其他用户的读、写和执行权限。当用ls -l命令显示文件或目录的详细信息时,最左边的一列为文件的访问权限。例如:, -rw-r–r– 1 root root 000000 Ju1 l5 17:3l xxxxx. Tgz, 横线代表空许可,r代表只读,w代表写,x代表可执行。注意这里共有10个位置。第一个字符指定了文件类型,如果第一个字符是横线,表示是一个非目录的文件,如果是d,表示是一个目录。, 确定了一个文件的访问权限后,用户可以利用美国Linux服务器系统提供的chmod命令,来重新设定不同的访问权限,也可以利用chown命令来更改某个文件或目录的所有者,或利用chgrp命令来更改某个文件或目录的用户组。, 1、chmod 命令, chmod命令用于改变文件或目录的访问权限,美国Linux服务器用户用它控制文件或目录的访问权限。该命令有两种用法。一种是包含字母和操作符表达式的文字设定法,另一种是包含数字的数字设定法。, 1)文字设定法, chmod [who] [+ | – | =] [mode] 文件名¼, 命令中各选项的含义为:, 操作对象who可是下述字母中的任一个或者它们的组合:, u 表示-用户(user),即文件或目录的所有者。, g 表示同组(group)用户,即与文件属主有相同组ID的所有用户。, o 表示其他(others)用户。, a 表示所有(all)用户,它是系统默认值。, 操作符号可以是:, + :添加某个权限。, – :取消某个权限。, = :赋予给定权限并取消其他所有权限。, 设置mode所表示的权限可用下述字母的任意组合:, R: 可读。, w :可写。, x :可执行。x 只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x 属性。, s 在文件执行时把进程的属主或组ID置为该文件的文件属主。方式u+s设置文件的用户ID位, g+s设置组ID位。, t 保存程序的文本到交换设备上。, u 与文件属主拥有一样的权限。, g 与和文件属主同组的用户拥有一样的权限。, o 与其他用户拥有一样的权限。, 文件名:以空格分开的要改变权限的文件列表,支持通配符, 在一个命令行中可给出多个权限方式,其间用逗号隔开。例如:chmod g+r,o+r example。, 2)数字设定法, 美国Linux服务器用户必须首先了解用数字表示的属性的含义:0表示没有权限,1表示可执行权限,2表示可写权限,4表示可读权限,然后将其相加。所以数字属性的格式应为3个从0到7的八进制数,其顺序是(u)(g)(o)。, 例如,如果想让某个文件的属主有读/写二种权限,需要把4(可读)+2(可写)=6(读/写)。, 数字设定法的一般形式为:chmod [mode] 文件名¼, 3、chgrp命令, 功能:改变美国Linux服务器系统文件或目录所属的组。语法:chgrp [选项] group filename¼, 该命令改变指定指定文件所属的用户组。其中group可以是用户组ID,也可以是/etc/group文件中用户组的组名。文件名是以空格分开的要改变属组的文件列表,支持通配符。如果用户不是该文件的属主或超级用户,则不能改变该文件的组。, 该命令的各选项含义为:- R 递归式地改变指定目录及其下的所有子目录和文件的属组。, 例:$ chgrp – R book /opt/local /book, 改变/opt/local /book/及其子目录下的所有文件的属组为book。, 4)chown 命令, 功能:更改美国Linux服务器系统某个文件或目录的属主和属组。这个命令也很常用。例如root用户把自己的一个文件拷贝给用户zoe,为了让用户zoe能够存取这个文件,root用户应该把这个文件的属主设为zoe,否则用户zoe无法存取这个文件。, 语法:chown [选项]用户或组文件, 说明:chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或用户ID,组可以是组名或组ID,文件是以空格分开的要改变权限的文件列表,支持通配符。, 该命令的各选项含义如下:, – R 递归式地改变指定目录及其下的所有子目录和文件的拥有者。, – v 显示chown命令所做的工作。, 以上内容就是关于美国Linux服务器修改系统文件权限的方式介绍,希望能帮助到有需要的美国Linux服务器用户。, 现在vsping科技合作的美国VM机房的美国Linux服务器所有配置都免费赠送防御值 ,可以有效防护网站的安全,以下是部分配置介绍:,, 美国Linux服务器系统中每个文件或目录都有特定的访问权限,文件和目录的访问权限同样都分为三种,包括只读,只写和可执行,美国Linux服务器用户根据需要的访问权限可以将其设置为需要的类型。本文小编就来介绍下美国Linux服务器修改系统文件权限的方式。, 美国Linux服务器每一文件或目录的访问权限都有三组,每组用三位表示,分别为文件属主的读、写和执行权限;与属主同组的用户的读、写和执行权限;系统中其他用户的读、写和执行权限。当用ls -l命令显示文件或目录的详细信息时,最左边的一列为文件的访问权限。例如:, w :可写。
, ,,
美国Linux服务器用户有时会需要查看系统中正在活动的具体用户信息,以及这些用户在美国Linux服务器上的操作内容。今天小编就来介绍下美国Linux服务器查看当前登录用户信息的方式。,方式1: 使用w命令,w命令用于显示美国Linux服务器已经登录系统的用户的名称,以及其正在进行的操作。该命令所使用的信息来源于/var/run/utmp文件。,w命令查看结果的信息包括:,1)用户名称,2)用户的机器名称或终端号,3)远程主机地址,4)用户登录系统的时间,5)空闲时间,6)附加到终端的进程所用的时间,7)当前进程所用时间,8)用户当前正在使用的命令,美国Linux服务器的w命令还可以使用以下选项:,-h忽略头文件信息,-u显示结果的加载时间,-s不显示JCPU, PCPU, 登录时间,方式2:使用who命令,who命令可用于查看当前已登录美国Linux服务器系统的用户名称,其查看结果的信息包括用户名称、终端号、当前时间日期、远程主机地址。,方式3:使用whoami命令,whoami命令用于显示登入美国Linux服务器的用户名,其执行效果和id -un的效果完全一样,其查看结果的信息包括如下内容:用户名称、终端号、当前时间日期,、远程主机地址。当然如果美国Linux服务器用户使用su命令改变用户,则whoami该命令所显示的结果将随之改变。,方式4:查看美国Linux服务器系统的历史信息,last命令可用于显示特定用户登录美国Linux服务器系统的历史记录,如果命令没有指定任何参数,则显示所有用户的历史信息。在默认情况下这些所显示的信息将来源于/var/log/wtmp文件。,该命令的输出结果包含以下几列信息:,1)用户名称,2)终端设备号,3)历史登录时间日期,4)登出时间日期,5)总工作时间,以上内容就是美国Linux服务器查看当前系统登录用户信息的方式,希望能帮助到有需要的美国Linux服务器用户们。, , ,,美国Linux服务器用户有时会需要查看系统中正在活动的具体用户信息,以及这些用户在美国Linux服务器上的操作内容。今天小编就来介绍下美国Linux服务器查看当前登录用户信息的方式。,方式1: 使用w命令,last命令可用于显示特定用户登录美国Linux服务器系统的历史记录,如果命令没有指定任何参数,则显示所有用户的历史信息。在默认情况下这些所显示的信息将来源于/var/log/wtmp文件。
计算机领域的很多技术都是需求推动的,上世纪90年代,由于互联网的飞速发展,网络服务器无法支撑快速增长的用户规模。1999年,Dan Kegel提出了著名的C10问题:一台服务器上同时处理10000个客户网络连接。10000个网络连接并不会发送请求到服务器,有些连接并不活跃,同一时刻,只有极少的部分连接发送请求。不同的服务类型,每个连接发送请求的频率也不相同,游戏服务器的连接会频繁的发送请求,而Web服务器的连接发送请求的频率就低很多。无论如何,根据经验法则,对于特定的服务类型,连接越多,同一时刻发送请求的连接也越多。,时至今日,C10K问题当然早已解决,不仅如此,一台机器能支撑的连接越来越多,后来提出了C10M问题,在一台机器上支撑1000万的连接,2015年,MigratoryData在单机承载12M的连接,解决了C10M问题。,本文先回顾C10问题的解决方案,再探讨如何构建支撑C10M的应用程序,聊聊其中涉及的各种技术。,时间退回到1999年,当时要实现一个网络服务器,大概有这样几种模式,这是一种非常简单的模式,服务器启动后监听端口,阻塞在accept上,当新网络连接建立后,accept返回新连接,服务器启动一个新的进程/线程专门负责这个连接。从性能和伸缩性来说,这种模式是非常糟糕的,原因在于,有意思的是,这种模式虽然性能极差,但却依然是我们今天最常见到的模式,很多Web程序都是这样的方式在运行。,另外一种方式是使用select/poll,在一个线程内处理多个客户连接。select和poll能够监控多个socket文件描述符,当某个文件描述符就绪,select/soll从阻塞状态返回,通知应用程序可以处理用户连接了。使用这种方式,我们只需要一个线程就可以处理大量的连接,避免了多进程/线程的开销。之所以把select和poll放在一起说,原因在于两者非常相似,性能上基本没有区别,唯一的区别在于poll突破了select 1024个文件描述符的限制,然而当文件描述符数量增加时,poll性能急剧下降,因此所谓突破1024个文件描述符实际上毫无意义。select/poll并不完美,依然存在很多问题:,这两个限制让select/poll完全失去了伸缩性。连接数越多,文件描述符就越多,文件描述符越多,每次调用select/poll所带来的用户空间到内核空间的复制开销越大。最严重的是当报文达到,select/poll返回之后,必须遍历所有的文件描述符。假设现在有1万个连接,其中只一个连接发送了请求,但是select/poll就要把1万个连接全部检查一遍。,FreeBSD 4.1引入了kqueue,此时是2000年7月,而在Linux上,还要等待2年后的2002年才开始引入kqueue的类似实现: epoll。epoll最初于 2.5.44进入Linux kernel mainline,此时已经是2002年,距离C10K问题提出已经过了3年。,epoll是如何提供一个高性能可伸缩的IO多路复用机制呢?首先,epoll引入了epoll instance这个概念,epoll instance在内核中关联了一组要监听的文件描述符配置:interest list,这样的好处在于,每次要增加一个要监听的文件描述符,不需要把所有的文件描述符都配置一次,然后从用户地址空间复制到内核地址空间,只需要把单个文件描述符复制到内核地址空间,复制开销从O(n)降到了O(1)。,注册完文件描述符后,调用epoll_wait开始等待文件描述符事件。epoll_wait可以只返回已经ready的文件描述符,因此,在epoll_wait返回之后,程序只需要处理真正需要处理的文件描述符,而不用把所有的文件描述符全部遍历一遍。假设在全部N个文件描述符中,只有一个文件描述符Ready,select/poll要执行N次循环,epoll只需要一次。,epoll出现之后,Linux上才真正有了一个可伸缩的IO多路复用机制。基于epoll,能够支撑的网络连接数取决于硬件资源的配置,而不再受限于内核的实现机制。CPU越强,内存越大,能支撑的连接数越多。,不同的操作系统上提供了不同的IO多路复用实现,Linux上有epoll,FreeBSD有kqueue,Windows有IOCP。对于需要跨平台的程序,必然需要一个抽象层,提供一个统一的IO多路复用接口,屏蔽各个系统接口的差异性。,Reactor是实现这个目标的一次尝试,最早出现在Douglas C. Schmidt的论文”The Reactor An Object-Oriented Wrapper for Event-Driven Port Monitoring and Service Demultiplexing”中。从论文的名字可以看出,Reactor是poll这种编程模式的一个面向对象包装。考虑到论文的时间,当时正是面向对象概念正火热的时候,什么东西都要蹭蹭面向对象的热度。论文中,DC Schmidt描述了为什么要做这样的一个Wrapper,给出了下面几个原因,实际上除了第三条跨平台,其他几个理由实在难以站得住脚。select/poll这类接口复杂吗,使用起来容易出错吗,写出来的程序难以扩展吗?不过不这么说怎么体现Reactor的价值呢。正如论文名称所说的,Reactor本质是对操作系统IO多路复用机制的一个面向对象包装,为了证明Reactor的价值,DC Schmidt还用C++面向对象的特性实现了一个编程框架:ACE,实际上使用ACE比直接使用poll或者epoll复杂多了。,后来DC Schmidt写了一本书《面向模式的软件架构》,再次提到了Reactor,并重新命名为Reactor Pattern,现在网络上能找到的Reactor资料,基本上都是基于Reactor Pattern,而不是早期的面向Object-Orientend Wrapper。,《面向模式的软件》架构中还提到了另外一种叫做Proactor的模式,和Reactor非常类似,Reactor针对同步IO,Proactor则针对异步IO。,Reactor看上去并不复杂,但是想编写一个完整的应用程序时候就会发现其实没那么简单。为了避免Reactor主逻辑阻塞,所有可能会导致阻塞的操作必须注册到epoll上,带来的问题就是处理逻辑的支离破碎,大量使用callback,产生的代码复杂难懂。如果应用程序中还有非网络IO的阻塞操作,问题更严重,比如在程序中读写文件。Linux中文件系统操作都是阻塞的,虽然也有Linux AIO,但是一直不够成熟,难堪大用。很多软件采用线程池来解决这个问题,不能通过epoll解决的阻塞操作,扔到一个线程池执行。这又产生了多线程内存开销和上下文切换的问题。,Future机制是对Callback的简单优化,本质上还是Callback,但是提供了一致的接口,代码相对来说简单一些,不过在实际使用中还是比较复杂的。Seastar是一个非常彻底的future风格的框架,从它的代码可以看到这种编程风格真的非常复杂,阻塞式编程中一个函数几行代码就能搞定的事情,在Seastar里需要上百行代码,几十个labmda (在Seastar里叫做continuation)。,纤程是一种用户态调度的线程,比如Go语言中的goroutine,有些人可能会把这种机制成为coroutine,不过我认为coroutine和纤程还是有很大区别的,coroutine是泛化的子进程,具有多个进入和退出点,用来一些一些相互协作的程序,典型的例子就是Python中的generator。纤程则是一种运行和调度机制。,纤程真正做到了高性能和易用,在Go语言中,使用goroutine实现的高性能服务器是一件轻松愉快的事情,完全不用考虑线程数、epoll、回调之类的复杂操作,和编写阻塞式程序完全一样。,网络子系统是Linux内核中一个非常庞大的组件,提供了各种通用的网络能力。通用通常意味在在某些场景下并不是最佳选择。实际上业界的共识是Linux内核网络不支持超大并发的网络能力。根据我过去的经验,Linux最大只能处理1MPPS,而现在的10Gbps网卡通常可以处理10MPPS。随着更高性能的25Gbps,40Gbps网卡出现,Linux内核网络能力越发捉襟见肘。,为什么Linux不能充分发挥网卡的处理能力?原因在于:,Linux高性能网络一个方向就是绕过内核的网络栈(kernel bypass),业界有不少尝试,kernel bypass技术最大的问题在于不支持POSIX接口,用户没办法不修改代码直接移植到一种kernel bypass技术上。对于大多数程序来说,还要要运行在标准的内核网络栈上,通过调整内核参数提升网络性能。,报文到达网卡之后,在一个CPU上触发中断,CPU执行网卡驱动程序从网卡硬件缓冲区读取报文内容,解析后放到CPU接收队列上。这里所有的操作都在一个特定的CPU上完成,高性能场景下,单个CPU处理不了所有的报文。对于支持多队列的网卡,报文可以分散到多个队列上,每个队列对应一个CPU处理,解决了单个CPU处理瓶颈。,为了充分发挥多队列网卡的价值,我们还得做一些额外的设置:把每个队列的中断号绑定到特定CPU上。这样做的目的,一方面确保网卡中断的负载能分配到不同的CPU上,另外一方面可以将负责网卡中断的CPU和负责应用程序的CPU区分开,避免相互干扰。,在Linux中,/sys/class/net/${interface}/device/msi_irqs下保存了每个队列的中断号,有了中断号之后,我们就可以设置中断和CPU的对应关系了。网上有很多文章可以参考。,回忆下TCP数据的发送过程:应用程序将数据写到套接字缓冲区,内核将缓冲区数据切分成不大于MSS的片段,附加上TCP Header和IP Header,计算Checksum,然后将数据推到网卡发送队列。这个过程中需要CPU全程参与, 随着网卡的速度越来越快,CPU逐渐成为瓶颈,CPU处理数据的速度已经赶不上网卡发送数据的速度。经验法则,发送或者接收1bit/s TCP数据,需要1Hz的CPU,1Gbps需要1GHz的CPU,10Gbps需要10GHz的CPU,已经远超单核CPU的能力,即使能完全使用多核,假设单个CPU Core是2.5GHz,依然需要4个CPU Core。,为了优化性能,现代网卡都在硬件层面集成了TCP分段、添加IP Header、计算Checksum等功能,这些操作不再需要CPU参与。这个功能叫做tcp segment offloading,简称tso。使用ethtool -k 可以检查网卡是否开启了tso,除了tso,还有其他几种offloading,比如支持udp分片的ufo,不依赖驱动的gso,优化接收链路的lro,随着摩尔定律失效,CPU已经从追求高主频转向追求更多的核数,现在的服务器大都是96核甚至更高。构建一个支撑C10M的应用程序,必须充分利用所有的CPU,最重要的是程序要具备水平伸缩的能力:随着CPU数量的增多程序能够支撑更多的连接。,很多人都有一个误解,认为程序里使用了多线程就能利用多核,考虑下CPython程序,你可以创建多个线程,但是由于GIL的存在,程序最多只能使用单个CPU。实际上多线程和并行本身就是不同的概念,多线程表示程序内部多个任务并发执行,每个线程内的任务可以完全不一样,线程数和CPU核数没有直接关系,单核机器上可以跑几百个线程。并行则是为了充分利用计算资源,将一个大的任务拆解成小规模的任务,分配到每个CPU上运行。并行可以 通过多线程实现,系统上有几个CPU就启动几个线程,每个线程完成一部分任务。,并行编程的难点在于如何正确处理共享资源。并发访问共享资源,最简单的方式就加锁,然而使用锁又带来性能问题,获取锁和释放锁本身有性能开销,锁保护的临界区代码不能只能顺序执行,就像CPython的GIL,没能充分利用CPU。,这两种方式的思路是一样的,都是创建变量的多个副本,使用变量时只访问本地副本,因此不需要任何同步。现代编程语言基本上都支持Thread Local,使用起来也很简单,C/C++里也可以使用__thread标记声明ThreadLocal变量。,Per-CPU则依赖操作系统,当我们提到Per-CPU的时候,通常是指Linux的Per-CPU机制。Linux内核代码中大量使用Per-CPU变量,但应用代码中并不常见,如果应用程序中工作线程数等于CPU数量,且每个线程Pin到一个CPU上,此时才可以使用。,如果共享资源是int之类的简单类型,访问模式也比较简单,此时可以使用原子变量。相比使用锁,原子变量性能更好。在竞争不激烈的情况下,原子变量的操作性能基本上和加锁的性能一致,但是在并发比较激烈的时候,等待锁的线程要进入等待队列等待重新调度,这里的挂起和重新调度过程需要上下文切换,浪费了更多的时间。,大部分编程语言都提供了基本变量对应的原子类型,一般提供set, get, compareAndSet等操作。,lock-free这个概念来自,non-blocking算法任何线程失败或者挂起,不会导致其他线程失败或者挂起,lock-free则进一步保证线程间无依赖。这个表述比较抽象,具体来说,non-blocking要求不存在互斥,存在互斥的情况下,线程必须先获取锁再进入临界区,如果当前持有锁的线程被挂起,等待锁的线程必然需要一直等待下去。对于活锁或者饥饿的场景,线程失败或者挂起的时候,其他线程完全不仅能正常运行,说不定还解决了活锁和饥饿的问题,因此活锁和饥饿符合non-blocking,但是不符合lock-free。,实现一个lock-free数据结构并不容易,好在已经有了几种常见数据结构的的lock-free实现:buffer, list, stack, queue, map, deque,我们直接拿来使用就行了。,有时候没有条件使用lock-free,还是得用锁,对于这种情况,还是有一些优化手段的。首先使用尽量减少临界区的大小,使用细粒度的锁,锁粒度越细,并行执行的效果越好。其次选择适合的锁,比如考虑选择读写锁。,使用CPU affinity机制合理规划线程和CPU的绑定关系。前面提到使用CPU affinity机制,将多队列网卡的中断处理分散到多个CPU上。不仅是中断处理,线程也可以绑定,绑定之后,线程只会运行在绑定的CPU上。为什么要将线程绑定到CPU上呢?绑定CPU有这样几个好处,Linux上设置CPU affinity很简单,可以使用命令行工具taskset,也可以在程序内直接调用API sched_getaffinity和 sched_setaffinity,Linux中,程序内使用的内存地址是虚拟地址,并不是内存的物理地址。为了简化虚拟地址到物理地址的映射,虚拟地址到物理地址的映射最小单位是“Page”,默认情况下,每个页大小为4KB。CPU指令中出现的虚拟地址,为了读取内存中的数据,指令执行前要把虚拟地址转换成内存物理地址。Linux为每个进程维护了一张虚拟地址到物理地址的映射表,CPU先查表找到虚拟地址对应的物理地址,再执行指令。由于映射表维护在内存中,CPU查表就要访问内存。相对CPU的速度来说,内存其实是相当慢的,一般来说,CPU L1 Cache的访问速度在1ns左右,而一次内存访问需要60-100ns,比CPU执行一条指令要慢得多。如果每个指令都要访问内存,比如严重拖慢CPU速度,为了解决这个问题,CPU引入了TLB(translation lookaside buffer),一个高性能缓存,缓存映射表中一部分条目。转换地址时,先从TLB查找,没找到再读内存。,显然,最理想的情况是映射表能够完全缓存到TLB中,地址转换完全不需要访问内存。为了减少映射表大小,我们可以使用“HugePages”:大于4KB的内存页。默认HugePages是2MB,最大可以到1GB。,内存分配是个复杂且耗时的操作,涉及空闲内存管理、分配策略的权衡(分配效率,碎片),尤其是在并发环境中,还要保证内存分配的线程安全。如果内存分配成为了应用瓶颈,可以尝试一些优化策略。比如内存复用i:不要重复分配内存,而是复用已经分配过的内存,在C++/Java里则考虑复用已有对象,这个技巧在Java里尤其重要,不仅能降低对象创建的开销,还避免了大量创建对象导致的GC开销。另外一个技巧是预先分配内存,实际上相当于在应用内实现了一套简单的内存管理,比如Memcached的Slab。,对于一个Web服务器来说,响应一个静态文件请求需要先将文件从磁盘读取到内存中,再发送到客户端。如果自信分析这个过程,会发现数据首先从磁盘读取到内核的页缓冲区,再从页缓冲区复制到Web服务器缓冲区,接着从Web服务器缓冲区发送到TCP发送缓冲区,最后经网卡发送出去。这个过程中,数据先从内核复制到进程内,再从进程内回到内核,这两次复制完全是多余的。Zero Copy就是类似情况的优化方案,数据直接在内核中完成处理,不需要额外的复制。,Linux中提供了几种ZeroCopy相关的技术,包括 sendfile, splice, copy_file_range,Web服务器中经常使用 sendfile优化性能。,, ,计算机领域的很多技术都是需求推动的,上世纪90年代,由于互联网的飞速发展,网络服务器无法支撑快速增长的用户规模。1999年,Dan Kegel提出了著名的C10问题:一台服务器上同时处理10000个客户网络连接。10000个网络连接并不会发送请求到服务器,有些连接并不活跃,同一时刻,只有极少的部分连接发送请求。不同的服务类型,每个连接发送请求的频率也不相同,游戏服务器的连接会频繁的发送请求,而Web服务器的连接发送请求的频率就低很多。无论如何,根据经验法则,对于特定的服务类型,连接越多,同一时刻发送请求的连接也越多。,时至今日,C10K问题当然早已解决,不仅如此,一台机器能支撑的连接越来越多,后来提出了C10M问题,在一台机器上支撑1000万的连接,2015年,MigratoryData在单机承载12M的连接,解决了C10M问题。,网络子系统是Linux内核中一个非常庞大的组件,提供了各种通用的网络能力。通用通常意味在在某些场景下并不是最佳选择。实际上业界的共识是Linux内核网络不支持超大并发的网络能力。根据我过去的经验,Linux最大只能处理1MPPS,而现在的10Gbps网卡通常可以处理10MPPS。随着更高性能的25Gbps,40Gbps网卡出现,Linux内核网络能力越发捉襟见肘。
美国Linux服务器系统可以为用户提供灵活且精细化的文件系统安全权限控制,这是美国Linux服务器系统的优势之一,但也意味着美国Linux服务器用户对于系统安全权限的了解也是使用过程中需要注重的方面。本文小编就来介绍一下美国Linux服务器系统权限的基本知识。, 在开始美国Linux服务器权限介绍之前,先假设新建名为 Mengfei 的目录。使用 cd 命令进入这个目录,然后使用 ls -l 命令查看美国Linux服务器安全管理权限信息,如果以时间为序排列,加上 -t 选项:ls –lt。, 因为这一目录下没有文件,所以这一命令执行不会返回结果。现在创建两个名为 cat.txt 和 dog.txt 的空白文件,这一步使用 touch 命令将更为便捷,然后继续使用 mkdir 命令创建一个名为 Mei 的空目录。现在可以再次使用ls -l命令查看这些新文件的权限。然后需要留意这个命令输出结果的两个部分。, 1 、权限拥有者, 首先要注意的是谁具有访问美国Linux服务器文件/目录的权限。用户的类型主要有三种:用户、组和其他人,其他人的本质上既不是用户也不是组,还有一个全部,意思是几乎所有人。, 由于使用 root 作为美国Linux服务器当前用户,所以可以访问任何文件或目录,因为 root 是超级用户。然而,通常是用情况并非如此,用户可能是用被限定的普通用户登录。所有的用户都存储在 /etc/passwd 文件中,【组】的相关信息保存在 /etc/group 文件中。, 2 、权限具体范围, 需要注意的是 ls -l 命令输出结果的另一部分与执行权限有关。以上查看了创建的 dog.txt 和 cat.txt 文件以及 Pets 目录的所有者和组权限都属于 root 用户。可以通过这一信息了解到不同美国Linux服务器用户组所拥有的相应权限。, 可以把每一行分解成五部分。第一部分标志着它是文件还是目录:文件用 -(连字符)标记,目录用 d 来标记。接下来的三个部分分别是用户、组和其他人的对应权限。最后一部分是访问控制列表(ACL)的标志,是记录着特定用户或者用户组对该文件的操作权限的列表。, 美国Linux服务器系统权限级别可以用字母或数字标识。有三种权限类型:, 可读取:r 或 4, 可写入:w 或 2, 可执行:x 或 1, 每个字母符号r、w 或 x表示有该项权限,而 – 表示无该项权限。, 以上就是美国Linux服务器系统权限的基本知识,希望可以帮助到美国Linux服务器的新手用户们。, 现在vsping科技合作的美国VM机房的美国Linux服务器所有配置都免费赠送防御值 ,可以有效防护网站的安全,以下是部分配置介绍:,, 美国Linux服务器系统可以为用户提供灵活且精细化的文件系统安全权限控制,这是美国Linux服务器系统的优势之一,但也意味着美国Linux服务器用户对于系统安全权限的了解也是使用过程中需要注重的方面。本文小编就来介绍一下美国Linux服务器系统权限的基本知识。, 在开始美国Linux服务器权限介绍之前,先假设新建名为 Mengfei 的目录。使用 cd 命令进入这个目录,然后使用 ls -l 命令查看美国Linux服务器安全管理权限信息,如果以时间为序排列,加上 -t 选项:ls –lt。,
美国Linux服务器系统网站运维管理的自然少不了运维工具的加持,今天小编就来分享下Linux服务器系统网站运维的工具。, 美国Linux服务器系统网站运维配置类工具:Capistrano、Chef、 puppet func、 salstack Ansible、 rundeck, Linux服务器系统网站运维监控类工具: Cacti、基于时间监控前端Grafana、 Mtop、 MRT(网络流量监控图形工具、Monit, 美国Linux服务器系统网站运维性能监控工具:sar性能监控和瓶颈检查、dstat多类型资源统计、slabtop内核slab缓存信息、nmon类Unix系统性能监控、iperf网络性能工具、sysdig系统进程高级视图、tcpdump网络抓包、、collect性能监控工具iftop类似top的网络连接工具、smem高级内存报表, 网站运维免费APMI具: mmtrix全面的分析工具、alibench, 进程监控工具: mmonit、Supervisor, 日志系统: Logstash、Scribe, 绘图工具: RRDtool、Gnuplot, 运维流控系统: Panabit.在线数据包分析工具、Pcap Analyzer, 网站运维安全检查工具: chrootkit、Rkhunter, 运维持续集成工具: Go、Jenkins、 Gitlab, 磁盘压测: fio、iozone, 网站MySQL监控: mytop、orzdba、SQL级监控mysqlpcap、拓扑可视化工具, 网站MySQL基准测试: mysqlsla. sql-bench. Super Smack. Percona’s TPCC-MYSQL Tool. Sysbench, 运维MySQL Proxy: SOHU-DBProxy. Altas、 cobra, MySQL逻辑备份工具: mysqldump、 mysqlhotcopy. mydumper. MySQLDumper 、mk-parallel-dump/mk parallel-restore, MySQL物理备份工具: Xtrabackup. LVM Snapshot, Linux服务器系统网站运维MongoDB压测:ibench&sysbench, 以上就是美国Linux服务器系统网站运维工具的分享,希望能帮助到有需要的Linux服务器用户。, 现在vsping科技合作的美国VM机房的美国Linux服务器所有配置都免费赠送防御值 ,可以有效防护网站的安全,以下是部分配置介绍:,, 美国Linux服务器系统网站运维管理的自然少不了运维工具的加持,今天小编就来分享下Linux服务器系统网站运维的工具。, 美国Linux服务器系统网站运维配置类工具:Capistrano、Chef、 puppet func、 salstack Ansible、 rundeck,
美国Linux服务器在使用过程中,如果想要了解当前系统具体开放的端口情况,以及这些端口的关联进程和用户,可以通过美国Linux服务器系统的 netstat 命令进行查询。今天小编就来介绍下美国Linux服务器的netstat 命令。, 一、美国Linux服务器netstat 命令各参数说明如下:, 二、美国Linux服务器常用的 netstat 命令组合, 1、netstat –na, 该命令将显示所有活动的网络连接。同时还可以结合使用 grep、wc、sort 等美国Linux服务器系统命令来分析系统中连接情况,查看连接数状况,判断美国Linux服务器是否被攻击。, 2、netstat -an | grep :80 | sort, 显示美国Linux服务器所有 80 端口的网络连接并排序,因为 80 端口是HTTP 端口,所以可以用来监控 web 服务。如果看到同一个 IP 有大量连接,则判定该 IP 疑似存在单点流量攻击行为。, 3、netstat -n -p|grep SYN_REC | wc –l, 统计当前美国Linux服务器有多少个活动的 SYNC_REC 连接数。正常来说这个值小于 5。当有 DDos 攻击或时该值可能会非常高,但有些并发很高的美国Linux服务器该值也会偏高,所以该值高需要具体分析。, 4、netstat -n -p | grep SYN_REC | sort –u, 列出所有连接过美国Linux服务器的 IP 地址。, 5、netstat -n -p | grep SYN_REC | awk ‘{print $5}’ | awk -F: ‘{print $1}’, 列出所有发送 SYN_REC 连接节点的 IP 地址。, 6、netstat -ntu | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort –n, 计算每个主机连接到美国Linux服务器的连接数。, 7、netstat -anp |grep ‘tcp|udp’ | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort –n, 列出所有连接到美国Linux服务器的 UDP...