首页 > Linux > Linux系统服务管理
影响Linux系统性能的因素有哪些?
评价 Linux 系统性能的好坏,大致可以从 Linux 完成任务的有效性、稳定性以及响应速度等方面进行考量。作为 Linux 系统管理员,可能经常会遇到系统不稳定、响应速度慢等问题。
例如,在 Linux 系统搭建了一个 Web 服务,就可能出现网页无法打开、打开速度慢等现象,而遇到这些问题时,有人可能会抱怨 Linux 系统不好,其实这些不过是表面现象。
要知道,操作系统在完成某个任务时,与系统自身设置、网络拓扑结构、路由设备、接入设备、物理线路等多个方面都密切相关,任何一个环节出现问题,都会影响整个系统的性能。
对于 Linux 系统来说,当运行应用程序出现问题时,要从应用程序本身、操作系统、服务器硬件和网络环境等方面综合排查,深度剖析问题出现在哪个部分,才能有针对性地解决。
那么,影响 Linux 系统性能的因素主要有哪些呢?
但亊实也并非完全如此,目前大部分 CPU 在同一时间内只能运行一个线程,超线程的处理器可以在同一时间运行多个线程,因而可以利用处理器的超线程特性提髙系统性能。
而在 Linux 系统下,只有运行 SMP 内核才能支持超线程,但是安装的 CPU 数量越多,从超线程获得的性能上的提高就越少。另外,Linux 内核会把多核的处理器当作多个单独的 CPU 来识别,例如两颗 4 核的 CPU 在 Linux 系统下会认为是 8 颗 CPU。
Linux 系统采用了物理内存和虚拟内存的概念,虚拟内存虽然可以缓解物理内存的不足,但是占用过多的虚拟内存,应用程序的性能将明显下降。要保证应用程序的高性能运行,物理内存一定要足够大,但不应过大,否则会造成内存资源的浪费。
例如,在一个 32 位处理器的 Linux 操作系统上,超过 8GB 的物理内存都将被浪费。因此,要使用更大的内存,建议安装 64 位的操作系统,同时开启 Linux 的大内存内核支持。
不仅如此,由于处理器寻址范围的限制,在 32 位 Linux 操作系统上,应用程序单个进程最大只能使用 2GB 的内存。这样即使系统有更大的内存,应用程序也无法“享”用,解决的办法就是使用 64 位处理器,安装 64 位操作系统,在 64 位操作系统下,可以满足所有应用程序对内存的使用需求,几乎没有限制。
对内存性能要求比较的应用有打印服务器、数据库服务器和静态 Web 服务器等,因此对于这类应用,要把内存大小放在主要位置。
不过,好在现今的磁盘都采用了很多方法来提高 I/O 性能,比如常见的磁盘 RAID 技术。
RAID 的英文全称为 Redundant Array of Independent Disks,翻译成中文为独立磁盘冗余阵列,简称磁盘阵列。RAID 通过把多块独立的磁盘(物理硬盘)按不同方式组合起来,形成一个磁盘组(逻辑硬盘),从而提供比单个硬盘更高的 I/O 性能和数据冗余。
通过 RAID 技术组成的磁盘组,就相当于一个大硬盘,用户可以对它进行分区格式化、建立文件系统等操作,跟单个物理硬盘一模一样,惟一不同的是 RAID 磁盘组的 I/O 性能比单个硬盘要高很多,同时对数据的安全性也有很大提升。
幸运的是,现在的网络一般都是千兆带宽,或者光纤网络,带宽问题对应用程序性能造成的影响也在逐步降低。
通过对以上 4 个方面的讲述,不难看出,各个方面之间都是相互依赖的,不能孤立地从某个方面来排查问题。换句话说,当一个方面出现性能问题时,往往会引发其他方面出现问题。
例如,大量的磁盘读写势必消耗 CPU 和 I/O 资源,而内存的不足会导致频繁地进行内存页写入磁盘、磁盘写到内存的操作,造成磁盘 I/O 瓶颈,同时大量的网络流量也会造成 CPU 过载。总之,在处理性能问题时,应纵观全局,从各个方面进行综合考虑。
例如,在 Linux 系统搭建了一个 Web 服务,就可能出现网页无法打开、打开速度慢等现象,而遇到这些问题时,有人可能会抱怨 Linux 系统不好,其实这些不过是表面现象。
要知道,操作系统在完成某个任务时,与系统自身设置、网络拓扑结构、路由设备、接入设备、物理线路等多个方面都密切相关,任何一个环节出现问题,都会影响整个系统的性能。
对于 Linux 系统来说,当运行应用程序出现问题时,要从应用程序本身、操作系统、服务器硬件和网络环境等方面综合排查,深度剖析问题出现在哪个部分,才能有针对性地解决。
那么,影响 Linux 系统性能的因素主要有哪些呢?
CPU
CPU 是操作系统稳定运行的根本,CPU 的速度与性能很大一部分决定了系统整体的性能,因此 CPU 数量越多、主频越高,服务器性能也就相对越好。但亊实也并非完全如此,目前大部分 CPU 在同一时间内只能运行一个线程,超线程的处理器可以在同一时间运行多个线程,因而可以利用处理器的超线程特性提髙系统性能。
而在 Linux 系统下,只有运行 SMP 内核才能支持超线程,但是安装的 CPU 数量越多,从超线程获得的性能上的提高就越少。另外,Linux 内核会把多核的处理器当作多个单独的 CPU 来识别,例如两颗 4 核的 CPU 在 Linux 系统下会认为是 8 颗 CPU。
在 Linux 系统中,邮件服务器、动态 Web 服务器等应用对 CPU 性能的要求相对较高,因此对于这类应用,要把 CPU 的配置和性能放在主要位置。注意,从性能角度来讲,两颗 4 核的 CPU 和 8 颗单核的 CPU 并不完全等价,根据权威部门得出的测试结论,前者的整体性能要低于后者 25%〜30%。
内存
内存的大小也是影响 Linux 性能的一个重要的因素。内存太小,系统进程将被阻塞,应用也将变得缓慢,甚至失去响应;内存太大,会导致资源浪费。Linux 系统采用了物理内存和虚拟内存的概念,虚拟内存虽然可以缓解物理内存的不足,但是占用过多的虚拟内存,应用程序的性能将明显下降。要保证应用程序的高性能运行,物理内存一定要足够大,但不应过大,否则会造成内存资源的浪费。
例如,在一个 32 位处理器的 Linux 操作系统上,超过 8GB 的物理内存都将被浪费。因此,要使用更大的内存,建议安装 64 位的操作系统,同时开启 Linux 的大内存内核支持。
不仅如此,由于处理器寻址范围的限制,在 32 位 Linux 操作系统上,应用程序单个进程最大只能使用 2GB 的内存。这样即使系统有更大的内存,应用程序也无法“享”用,解决的办法就是使用 64 位处理器,安装 64 位操作系统,在 64 位操作系统下,可以满足所有应用程序对内存的使用需求,几乎没有限制。
对内存性能要求比较的应用有打印服务器、数据库服务器和静态 Web 服务器等,因此对于这类应用,要把内存大小放在主要位置。
磁盘读写(I/O)能力
磁盘的 I/O 能力会直接影响应用程序的性能。比如说,在一个需要频繁读写的应用中,如果磁盘 I/O 性能得不到满足,就会导致应用的停滞。不过,好在现今的磁盘都采用了很多方法来提高 I/O 性能,比如常见的磁盘 RAID 技术。
RAID 的英文全称为 Redundant Array of Independent Disks,翻译成中文为独立磁盘冗余阵列,简称磁盘阵列。RAID 通过把多块独立的磁盘(物理硬盘)按不同方式组合起来,形成一个磁盘组(逻辑硬盘),从而提供比单个硬盘更高的 I/O 性能和数据冗余。
通过 RAID 技术组成的磁盘组,就相当于一个大硬盘,用户可以对它进行分区格式化、建立文件系统等操作,跟单个物理硬盘一模一样,惟一不同的是 RAID 磁盘组的 I/O 性能比单个硬盘要高很多,同时对数据的安全性也有很大提升。
有关 RAID 更多的介绍,可阅读《Linux RAID(磁盘列阵)完全攻略》一节做深入了解。
网络带宽
Linux 下的各种应用,一般都是基于网络的,因此网络带宽也是影响性能的一个重要因素,低速的、不稳定的网络将导致网络应用程序的访问阻塞;而稳定、高速的带宽,可以保证应用程序在网络上畅通无阻地运行。幸运的是,现在的网络一般都是千兆带宽,或者光纤网络,带宽问题对应用程序性能造成的影响也在逐步降低。
通过对以上 4 个方面的讲述,不难看出,各个方面之间都是相互依赖的,不能孤立地从某个方面来排查问题。换句话说,当一个方面出现性能问题时,往往会引发其他方面出现问题。
例如,大量的磁盘读写势必消耗 CPU 和 I/O 资源,而内存的不足会导致频繁地进行内存页写入磁盘、磁盘写到内存的操作,造成磁盘 I/O 瓶颈,同时大量的网络流量也会造成 CPU 过载。总之,在处理性能问题时,应纵观全局,从各个方面进行综合考虑。
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算