共计 866 个字符,预计需要花费 3 分钟才能阅读完成。
对于一些大型任务,linux 系统默认会有一些保护机制,会自动杀掉一些进程,导致应用不可控,故障率很高,而且 CPU 和磁盘延迟经常跑满,下面给一些优化方法,或许会有帮助。
1、设置 IO 优先级
将用来处理大文件任务的进程,通过 IO 优化,指定优先级,这样有利于更好的利用资源:
ionice -c 2 -p 1234
-c 后跟随优先级等级数字,0- 7 一共 8 个值,其中 0 为最高级,7 为最低级,- p 后是进程 ID
2、CPU 优先级
renice -n 5 PID
- n 后面跟随优先级等级值,PID 是进程 ID,取值从 -20 到 20,其中 -20 优先级最高,可以最大化利用 cpu 资源。
3、direct_io 优化
direct_io 是 Linux 文件系统中的一种 I / O 方式,也称为“直接 I /O”或“绕过缓存的 I /O”。当启用 direct_io 时,文件系统会将数据直接读写到磁盘上,而不是通过内核缓存进行读写操作。
比如在阿里云的 ossfs 插件中,可以使用以下命令
ossfs bucketname /tmp/mnt -ourl=oss-cn-hangzhou-internal.aliyuncs.com -odirect_io -omax_write=131072
使用 direct_io 有以下优点:
1、避免了缓存污染:由于直接读写磁盘,direct_io 可以避免使用缓存时可能产生的缓存污染问题。缓存污染可能会导致数据不一致或数据丢失等问题。
2、提高性能:在某些情况下,direct_io 可以提高文件系统的读写性能。例如,在读写大文件或访问远程存储时,由于缓存的限制,使用 direct_io 可能比使用缓存的方式更快。
4、更好的一致性:使用 direct_io 可以确保文件系统的一致性,因为它不使用缓存,因此无需担心缓存一致性的问题。
需要注意的是,由于 direct_io 会绕过内核缓存,因此可能会导致一些应用程序的性能下降,尤其是在小文件或大量小文件的情况下。因此,应该根据具体的应用场景来决定是否使用 direct_io。另外,启用 direct_io 可能会导致磁盘负载增加,因此需要考虑磁盘的可靠性和容量。