1. CPU
注意事项
  • 64位的CPU一定要在64的系统下。
  • 对于并发比较高的场景,CPU数量比频率重要。
  • 对于CPU密集型场景和复杂SQL,频率更重要。
2. 内存
3. 磁盘IO
选择:
  • 机械硬盘:存储空间大,价格低,但是读写较慢。
  • 选择:容量,速度,访问时间,主轴转速,物理尺寸。
  • 固态硬盘:
  • 随机读写也非常快,适合并发。
  • RAID:磁盘冗余队列,将多个小硬盘组成大硬盘
  • RAID0: 串联,速度和容量N,但是丢失率也N。但是没有冗余。
  • RAID1:镜像,速度和成本*N,但是丢失率/N,类似于主从库。
  • RAID5:分布式奇偶校验,随机读,顺序读都很快,但是一个坏了就都坏了。
  • RAID10:先1再0,成本最高,但是可以提高速度,也降低了丢失率。
  • 网络存储
  • SAN:通过光钎连接到服务器,设备通过块设备访问,服务器可以将其当做硬盘使用。
  • NAS:通过网络连接,基于文件的NFS或SMB协议来访问。
注意事项
  • 大型活动的时候不要开计划任务,会导致磁盘IO突然暴增。
  • 磁盘的维护比升级更重要。
4. 网卡带宽
注意事项
  • 减少从服务器
  • 分级缓存
  • 减少select *
  • 分离业务服务器和数据库服务器网络

2.服务器系统

1.参数优化

网络和内存相关

/etc/sysctl.conf
net.core.somaxconn = 65535   //每个端口最大监听队列长度
net.core.netdev_max_backlog = 65535  //接包速率
net.ipv4.tcp_max_syn_backlog = 65535 //等待队列长度
//加快TCP回收
net.ipv4.tcp_fin_timeout = 10 //等待队列超时设置 
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
//TCP缓冲区相关
net.core.wmem_default = 87380
net.core.wmem_max = 16777216
net.core.rmem_default  = 87380
net.core.rmem_max= 16777216
//减少失效连接
net.ipv4.tcp_keepalive_time = 120  //时间间隔,确认是否有效
net.ipv4.tcp_keepalive_intvl = 30  //重发时间间隔
net.ipv4.tcp_keepalive_probes = 3 //重发次数
//内存设置
kernel.shmmax = 4294967295 //最重要的参数之一,用于定义单个共享内存段的最大值
注意:这个参数应该设置的足够大,以便能在一个共享内存内存段下容纳整个Innodb缓冲池的大小。建议值为物理内存的一般,或者物理内存-1byte
vm.swappiness = 0 //当内存不足时会有影响,linux内存交换区,为0表示除非虚拟内存满了,否则不使用交换区。

文件相关

/etc/security/limit.conf
PAM,插入式认证模块,打开文件数的限制。
* soft/hard nofile 65535
*表示对多有用户有效。
soft表示当前值,hard表示最大值。
nofile 表示打开文件句柄
63335 表示最大值。
两句话加到limit文件后面,重启生效。

磁盘相关

/sys/block/devname/quque/scheduler
cfq策略 完全公平策略,会插入一些不必要的请求。
noop电梯式调度策略。倾向于饿死读,利于写。适用于闪存设备,RAM,嵌入式设备。
deadline 截止时间调度策略。默认读期限小于写期限,防止饿死。对数据库是最好的。
anticipatory 预料IO调度策略。本质上和deadline一样,但是最后一次读操作后,要等待6秒,才能继续调度。会在每个6秒钟插入一个新的IO操作,而会将一些小的写入流合并成大写入流,用写入延迟换区最大的吞吐量。使用与写入较多的环境。比如文件服务器。

文件系统
/etc/fstab
data = writeback | ordered | journal
noatime,nodiratime
一般选择writeback