1.使用内存数据库

内存数据库,其实就是将数据放在内存中直接操作的数据库。相对于磁盘,内存的数据读写速度要高出几个数量级,将数据保存在内存中相比从磁盘上访问能够极大地提高应用的性能。内存数据库抛弃了磁盘数据管理的传统方式,基于全部数据都在内存中重新设计了体系结构,并且在数据缓存、快速算法、并行操作方面也进行了相应的改进,所以数据处理速度比传统数据库的数据处理速度要快很多。
      但是安全性的问题可以说是内存数据库最大的硬伤。因为内存本身有掉电丢失的天然缺陷,因此我们在使用内存数据库的时候,通常需要,提前对内存上的数据采取一些保护机制,比如备份,记录日志,热备或集群,与磁盘数据库同步等方式。对于一些重要性不高但是又想要快速响应用户请求的部分数据可以考虑内存数据库来存储,同时可以定期把数据固化到磁盘。

2.使用RDD

在大数据云计算相关领域的一些应用中,Spark可以用来加快数据处理速度。Spark的核心是RDD,RDD最早来源与Berkeley实验室的一篇论文《Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing》。现有的数据流系统对两种应用的处理并不高效:一是迭代式算法,这在图应用和机器学习领域很常见;二是交互式数据挖掘工具。这两种情况下,将数据保存在内存中能够极大地提高性能。

3.增加缓存

很多web应用是有大量的静态内容,这些静态内容主要都是一些小文件,并且会被频繁的读,采用Apache以及nginx作为web服务器。在web访问量不大的时候,这两个http服务器可以说是非常的迅速和高效,如果负载量很大的时候,我们可以采用在前端搭建cache服务器,将服务器中的静态资源文件缓存到操作系统内存中直接进行读操作,因为直接从内存读取数据的速度要远大于从硬盘读取。这个其实也是增加内存的成本来降低访问磁盘带来的时间消耗。

4.使用SSD

除了对内存方面的优化,还可以对磁盘这边进行优化。跟传统机械硬盘相比,固态硬盘具有快速读写、质量轻、能耗低以及体积小等特点。但是ssd的价格相比传统机械硬盘要贵,有条件的可以使用ssd来代替机械硬盘。

5.优化数据库

大部分的服务器请求最终都是要落到数据库中,随着数据量的增加,数据库的访问速度也会越来越慢。想要提升请求处理速度,必须要对原来的单表进行动刀了。目前主流的Linux服务器使用的数据库要属mysql了,如果我们使用mysql存储的数据单个表的记录达到千万级别的话,查询速度会很慢的。根据业务上合适的规则对数据库进行分区分表,可以有效提高数据库的访问速度,提升服务器的整体性能。另外对于业务上查询请求,在建表的时候可以根据相关需求设置索引等,以提高查询速度。

6.选择合适的IO模型

IO模型又分为:

(1).阻塞I/O模型:数据没到达之前,I/O一直阻塞,如果数据到达,则会返回。典型的是recvfrom,一般的默认都是阻塞的。
       (2).非阻塞的I/O模型:和阻塞相反,只要不能得到结果的时候,I/O立刻返回。不会阻塞当前线程。
       IO复用模型:也就是自己要学习的部分。多路复用的意思是,将多路信号合并到一路上进行处理,类似多个管道汇集到一个管道,与之相反的是多路分解。
       IO复用模型主要是select,poll,epoll;对一个IO端口,两次调用,两次返回,比阻塞IO并没有什么优越性;关键是能实现同时对多个IO端口进行监听;函数也会使进程阻塞,但是和阻塞I/O所不同的的,这两个函数可以同时阻塞多个I/O操作。而且可以同时对多个读操作,多个写操作的I/O函数进行检测,直到有数据可读或可写时,才真正调用I/O操作函数。
      信号驱动:首先开启套接口信号驱动I/O功能,并通过系统调用sigaction安装一个信号处理函数。当数据报准备好被读时,就为该进程生成一个SIGIO信号。随即可以在信号处理程序中调用recvfrom来读数据报,井通知主循环数据已准备好被处理中。也可以通知主循环,让它来读数据报。
       异步的IO模型:告知内核启动某个操作,并让内核在整个操作完成后(包括将数据从内核拷贝到用户自己的缓冲区)通知我们。这里并不是说一定要用某个模型,epoll也并不是在所有情况下都比select性能要好的,在选择的时候还是要结合业务需求来。

7.使用多核处理策略

现在运行服务器的主流机器配置都是多核CPU的,我们在设计服务器的时候可以利用多核心的特点,采用多进程或者多线程的框架。关于选择多线程还是多进程可以根据实际的需求,结合各自的优缺点进行选择。对于多线程的使用,特别是使用线程池的时候可以通过测试不同线程池服务器的性能来设置合适的线程池。

8.分布式部署程序

当单机服务器已经找不到合适的优化点时,我们可以通过分布式部署来提高服务器的响应能力。优秀的服务器开发都会为自己的服务器的扩容,容灾提出一些解决方案。个人觉得服务器设计的时候简单点比较好,这样后期扩容的时候会很方便。

服务器性能优化的8种常用方法相关推荐

  1. getallheaders函数在服务器报500错误_「干货」服务器性能优化的8种常用方法

    1.使用内存数据库 内存数据库,其实就是将数据放在内存中直接操作的数据库.相对于磁盘,内存的数据读写速度要高出几个数量级,将数据保存在内存中相比从磁盘上访问能够极大地提高应用的性能.内存数据库抛弃了磁 ...

  2. MySQL性能优化的9种方法

    MySQL性能优化的9种方法 1.选择最合适的字段属性 Mysql是一种关系型数据库,可以很好地支持大数据量的存储,但是一般来说,数据库中的表越小,在它上面执行的查询也就越快.因此,在创建表的时候,为 ...

  3. 服务器性能优化之网络性能优化

    hi ,大家好,今天分享一篇后台服务器性能优化之网络性能优化,希望大家对Linux网络有更深的理解. 曾几何时,一切都是那么简单.网卡很慢,只有一个队列.当数据包到达时,网卡通过DMA复制数据包并发送 ...

  4. golang string 加号连接性能慢_面试必备:浅析C#性能优化的若干种方法

    浅析C#性能优化的若干种方法 1.1 垃圾回收 垃圾回收解放了手工管理对象的工作,提高了程序的健壮性,但副作用就是程序代码可能对于对象创建变得随意. 1.1.1 避免不必要的对象创建 由于垃圾回收的代 ...

  5. Linux服务器性能优化

    Linux服务器性能优化 一 linux服务器性能查看 1.1 cpu性能查看 1.查看物理cpu个数: cat /proc/cpuinfo |grep "physical id" ...

  6. 服务器性能优化和Mysql性能优化

    服务器性能优化和Mysql性能优化 影响性能的几个因素 服务器硬件 CPU 内存 IO子系统 服务器系统 CentOS系统参数优化 sysctlconf 优化 limitconf参数优化 磁盘调度策略 ...

  7. 前端页面性能优化的几种方式

    前端页面性能优化的几种方式 提升页面性能优化的常见方式: 资源压缩合并,减少http请求 非核心代码异步加载 --> 异步加载的方式 --> 异步加载的区别 利用浏览器缓存 --> ...

  8. Zabbix服务器性能优化记录

    Zabbix服务器性能优化记录 一.检查服务器当前负载 二.检查CPU和内存占比 1.CPU占用率情况 2.内存使用情况 三.处理解决 1.临时关闭图形界面 2.systemd启动目标介绍 3.永久设 ...

  9. MySQL 性能优化:8 种常见 SQL 错误用法!

    声明:转载自 MySQL 性能优化:8 种常见 SQL 错误用法! 1.LIMIT 语句 分页查询是最常用的场景之一,但也通常也是最容易出问题的地方.比如对于下面简单的语句,一般 DBA 想到的办法是 ...

最新文章

  1. oracle 如何获取表的主键列名,如何获取表的所有列名
  2. 这是mac 重置mysql 的三种做法
  3. MySQL高级 - 日志 - 慢查询日志
  4. Python3求最后一个单词长度
  5. mysql乐观锁重试_乐观锁加重试,并发更新数据库一条记录导致:Lock wait timeout exceeded...
  6. JavaScript 已被淘汰?
  7. hdu1533解题报告
  8. Kubernetes之实战入门
  9. HDU 6155 Subsequence Count(矩阵 + DP + 线段树)题解
  10. freeswitch的拨号规则配置
  11. (1)统一流程管理平台--前言
  12. 2021-07-27 Vue修改主页
  13. adb双击POWER键指令
  14. 实现进程互斥需要遵循的原则
  15. springboot智慧餐厅点餐餐桌预订系统设计与实现
  16. python3爬虫爬取网易云_【Python3爬虫】网易云音乐歌单下载
  17. 基于Snort的入侵检测系统
  18. 利用SPI驱动12864液晶
  19. 微信第 1 行代码曝光!
  20. 浅谈华为如何实现区块链的安全隐私保护

热门文章

  1. 【蓝桥杯嵌入式】【STM32】10_InputCaputer之输入捕获
  2. 从程序员到项目经理(五):程序员加油站 -- 不是人人都懂的学习要点
  3. 安卓+4.0.4+java模拟器_Android 4.0.4模拟器安装完全教程(图文)
  4. git获得当前分支url_笔记本拿出来!软件工程师必须要知道的Git命令语句大汇总...
  5. 【LeetCode】剑指 Offer 44. 数字序列中某一位的数字
  6. 正则的简单学习与应用
  7. 批量合并同一文件夹下工作簿-1
  8. Linux基本命令(二)
  9. T-SQL 操作文件 具体解释
  10. 一天一模式:Decorator模式