1、如何提高Linux服务器磁盘io性能
您好,很高兴为您解答。
在现有文件系统下进行优化:
linux内核和各个文件系统采用了几个优化方案来提升磁盘访问速度。但这些优化方案需要在我们的服务器设计中进行配合才能得到充分发挥。
文件系统缓存
linux内核会将大部分空闲内存交给虚拟文件系统,来作为文件缓存,叫做page cache。在内存不足时,这部分内存会采用lru算法进行淘汰。通过free命令查看内存,显示为cached的部分就是文件缓存了。
如何针对性优化:
lru并不是一个优秀淘汰算法,lru最大的优势是普适性好,在各种使用场景下都能起到一定的效果。如果能找到当前使用场景下,文件被访问的统计特征,针 对性的写一个淘汰算法,可以大幅提升文件缓存的命中率。对于http正向代理来说,一个好的淘汰算法可以用1GB内存达到lru算法100GB内存的缓存 效果。如果不打算写一个新的淘汰算法,一般不需要在应用层再搭一个文件cache程序来做缓存。
最小分配:
当文件扩大,需要分配磁盘空间时,大部分文件系统不会仅仅只分配当前需要的磁盘空间,而是会多分配一些磁盘空间。这样下次文件扩大时就可以使用已经分配好的空间,而不会频繁的去分配新空间。
例如ext3下,每次分配磁盘空间时,最小是分配8KB。
最小分配的副作用是会浪费一些磁盘空间(分配了但是又没有使用)
如何针对性优化:
我们在reiserfs下将最小分配空间从8KB改大到128K后提升了30%的磁盘io性能。如果当前使用场景下小文件很多,把预分配改大就会浪费很多 磁盘空间,所以这个数值要根据当前使用场景来设定。似乎要直接改源代码才能生效,不太记得了,09年的时候改的,有兴趣的同学自己google吧。
io访问调度:
在同时有多个io访问时,linux内核可以对这些io访问按LBA进行合并和排序,这样磁头在移动时,可以“顺便”读出移动过程中的数据。
SATA等磁盘甚至在磁盘中内置了io排序来进一步提升性能,一般需要在主板中进行配置才能启动磁盘内置io排序。linux的io排序是根据LBA进行的,但LBA是一个一维线性地址,无法完全反应出二维的圆形磁盘,所以磁盘的内置io排序能达到更好的效果。
如何针对性优化:
io访问调度能大幅提升io性能,前提是应用层同时发起了足够的io访问供linux去调度。
怎样才能从应用层同时向内核发起多个io访问呢?
方案一是用aio_read异步发起多个文件读写请求。
方案二是使用磁盘线程池同时发起多个文件读写请求。
对我们的http正向代理来说,采用16个线程读写磁盘可以将性能提升到2.5倍左右。具体开多少个线程/进程,可以根据具体使用场景来决定。
小提示:
将文件句柄设置为非阻塞时,进程还是会睡眠等待磁盘io,非阻塞对于文件读写是不生效的。在正常情况下,读文件只会引入十几毫秒睡眠,所以不太明显;而在磁盘io极大时,读文件会引起十秒以上的进程睡眠。
预读取:
linux内核可以预测我们“将来的读请求”并提前将数据读取出来。通过预读取可以减少读io的次数,并且减小读请求的延时。
如何针对性优化:
预读取的预测准确率是有限的,与其依赖预读取,不如我们直接开一个较大的缓冲区,一次性将文件读出来再慢慢处理;尽量不要开一个较小的缓冲区,循环读文件/处理文件。
虽然说“预读取”和“延迟分配”能起到类似的作用,但是我们自己扩大读写缓冲区效果要更好。
延迟分配:
当文件扩大,需要分配磁盘空间时,可以不立即进行分配,而是暂存在内存中,将多次分配磁盘空间的请求聚合在一起后,再进行一次性分配。
延迟分配的目的也是减少分配次数,从而减少文件不连续。
延迟分配的副作用有几个:
1、如果应用程序每次写数据后都通过fsync等接口进行强制刷新,延迟分配将不起作用
2、延迟分配有可能间歇性引入一个较大的磁盘IO延时(因为要一次性向磁盘写入较多数据)
只有少数新文件系统支持这个特性
如何针对性优化:
如果不是对安全性(是否允许丢失)要求极高的数据,可以直接在应用程序里缓存起来,积累到一定大小再写入,效果比文件系统的延迟分配更好。如果对安全性要求极高,建议经常用fsync强制刷新。
在线磁盘碎片整理:
Ext4提供了一款碎片整理工具,叫e4defrag,主要包含三个功能:
1、让每个文件连续存储
2、尽量让每个目录下的文件连续存储
3、通过整理空闲磁盘空间,让接下来的分配更不容易产生碎片
如何针对性优化:
“让每个目录下的文件连续存储”是一个极有价值的功能。
传统的做法是通过拼接图片来将这10张图片合并到一张大图中,再由前端将大图切成10张小图。
有了e4defrag后,可以将需连续访问的文件放在同一个文件夹下,再定期使用e4defrag进行磁盘整理。
实现自己的文件系统:
在大部分服务器上,不需要支持“修改文件”这个功能。一旦文件创建好,就不能再做修改操作,只支持读取和删除。在这个前提下,我们可以消灭所有文件碎片,把磁盘io效率提升到理论极限。
有一个公式可以衡量磁盘io的效率:
磁盘利用率 = 传输时间/(平均寻道时间+传输时间)
如若满意,请点击回答右侧【采纳答案】,如若还有问题,请点击【追问】
~ O(∩_∩)O~
2、服务器linux性能比windows更好吗
从需求性、稳定性、操作性、安全性、性价比来分析一番,然后您就知道该选哪款空间了。
需求性:
这个要看您网站选取的语言,如果是asp建设的网站,毫不犹豫应该选择Windows主机,Linux不支持asp系列的语言;如果是PHP语言建设的网站,建议选择Liunx主机,因为在liunx平台中,Linux+Apche+Mysql构架运行PHP网页可以更高效,更稳定。Linux空间还支持zend加速等,让你的网站跑的更顺畅!
稳定性:
主机的稳定性是至关重要的,关系着网站的生存发展,如果稳定性不够好的话,就会影响用户的访问,也会影响网站的优化,导致没有排名,这对于用户体验度的影响是非常大的。通常来说,Linux稳定性要比Windows好些,因为Linux开源,一般很少有漏洞,就很少会招到网络攻击。再就是Windows的图形界面需要占很多资源,而Linux系统去掉图形界面的包袱,系统运行得更快。
Windows配置变化的时候,通常需要重新启动,这导致不可避免的停机,而Linux通常不需要重新启动。几乎所有的Linux系统配置的改变都能在系统运行中操作,而且还不会影响其他无关的服务。
所以,Liunx要更稳定。
操作性:
Windows系统的普及和它的图形化界面让我们每个懂电脑的人都不会陌生了,而Linux服务器一般是纯命令行模式,每完成一个操作,比如新建一个文件夹,都要用一串命令来完成。所以从操作性来讲,Liunx操作性要困难些。
安全性:
从安全漏洞的数量上来说,Linux的开源开发方式有助于发现错误,集众人智慧解决问题,各种补丁更新得很快,这是Windows主机不具备的优势。Linux系统也有自己的缺点,就是厂商开发的硬件和相关驱动一般针对的是Windows系统,使得Linux的硬件兼容相对延后。Linux主要用作支持网络功能的操作系统,默认安装时启动了很多不必要的网络应用程序,这就可能造成安全漏洞。
还有Linux里面的权限分配的很细致、严格,各个用户之间也相互独立,所以安全性较好。
性价比:
从这点来讲,我想Linux的优势是显而易见的,因为Linux作为资源管理和操作系统来说,是开源、免费的。而Windows服务器系统是要收费的,相应,Windows里面的某些软件也是收费的。因此,Windows主机的成本就要比Linux高很多,自然Windows空间要贵一些。
那么现在很明显,Linux空间是比较有优势的,只不过它只能跑纯静态html或php建设的网站。所以如果网站只用到了php语言,那么选Linux空间是很不错的,无论从安全还是性能,都比windows有优势。反正,如果是asp或.net系列的网站,就选windows主机吧。
3、优化Linux服务器硬盘性能有什么窍门
优化都是没有窍门存在的,建议楼主还是踏踏实实做好优化工作,给您推荐两个常见的优回化技能:
一、清答理磁盘
这种方法看上去很简单:清理磁盘驱动器,删除不需要的文件,清除所有需要被保存但将不被使用的文件。如果可能的话,清除多余的目录,并减少子目录的数目。这些建议似乎显而易见,但是你会惊讶地发现,每个磁盘上确实积累了非常多的垃圾。释放磁盘空间可以帮助系统更好地工作。
二、使用软件RAID
RAID廉价驱动器的冗余阵列,也可以改善磁盘驱动器性能和容量。Linux支持软件RAID和硬件RAID.软件RAID嵌入在Linux 内核中,比硬件RAID花费要少得多。
4、怎么提高linux服务器性能,让速度更快更稳定
1、我们平时登陆Linux服务器的时候,都需要在输入用户名之后再等待专一下,这个时间因属不同而等的时间不一样。
2、其实这个问题是由ssh里边的配置造成的,只需要我们改一下即可正常快速登陆。
3、我们编辑sshd_config 这个文件:vi /etc/ssh/sshd_config。
4、然后在里边打开 需要修改的行。
5、我们把前面的#号去了,然后把yes 改变为no,UseDNS no。
6、然后保存退出,再重启下ssh服务测试下就可以了,service sshd restart。
5、请大家帮忙推荐一本LINux服务器性能调优的书籍
我就是这本书。。。这是一个很复杂的问题。本人前些时候刚刚给一个网商网站做过审计。项目那是很多的,而且很多跟具体的服务相关,譬如数据库。没有这么一本全面解释的书。
我做这个审计,也是在公司几年的技术积累的基础上做的,有一个资料库做支撑,还有各方面资深的工程师讨论。这是一个很复杂,相当靠经验的活儿。
6、如何用命令检查Linux服务器性能
Linux查询资源的使用情况,通长会用到如下命令:
1、top, 其会实时的显示当前系统中的回资源占用情况;
2、vmstat ,显示内答存和进程关联资源的相关信息;
3、iostat,评估磁盘的性能情况;
4、netstat,查看当前的网络连接情况;
5、ps,查看相关的进程信息。
还有很多开源的组件,需要你自己去发掘。
7、怎么优化linux服务器,现在很卡
慢只是感觉,需要你去作性能测试简单的是top看看谁占了资源,类似windows下的任务管理器看内存free-m情况另外还有测试命令如iostat之类的
8、如何让linux服务器磁盘io性能翻倍
如何让CentOS服务器磁盘io性能翻倍
这一期我们来看一下有哪些办法可以减少linux下的文件碎片。主要是针对磁盘长期满负荷运转的使用场景(例如http代理服务器);另外有一个小技巧,针对互联网图片服务器,可以将io性能提升数倍。如果为服务器订制一个专用文件系统,可以完全解决文件碎片的问题,将磁盘io的性能发挥至极限。对于我们的代理服务器,相当于把io性能提升到3-5倍。
在现有文件系统下进行优化linux内核和各个文件系统采用了几个优化方案来提升磁盘访问速度。但这些优化方案需要在我们的服务器设计中进行配合才能得到充分发挥。
文件系统缓存linux内核会将大部分空闲内存交给虚拟文件系统,来作为文件缓存,叫做page cache。在内存不足时,这部分内存会采用lru算法进行淘汰。通过free命令查看内存,显示为cached的部分就是文件缓存了。
如果能找到当前使用场景下,文件被访问的统计特征,针对性的写一个淘汰算法,可以大幅提升文件缓存的命中率。对于http正向代理来说,一个好的淘汰算法可以用1GB内存达到lru算法100GB内存的缓存效果。如果不打算写一个新的淘汰算法,一般不需要在应用层再搭一个文件cache程序来做缓存。