CentOS7的性能是否提升很多

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CentOS7的性能是否提升很多相关的知识,希望对你有一定的参考价值。

一、CentOS的Services使用了systemd来代替sysvinit管理
1、systemd的服务管理程序:
systemctl是主要的工具,它融合之前service和chkconfig的功能于一体。可以使用它永久性或只在当前会话中启用/禁用服务。
systemctl可以列出正在运行的服务状态,如图:

systemd-cgls以树形列出正在运行的进程,它可以递归显示控制组内容。如图:

2、如何启动/关闭、启用/禁用服务看
启动一个服务:systemctl start postfix.service
关闭一个服务:systemctl stop postfix.service
重启一个服务:systemctl restart postfix.service
显示一个服务的状态:systemctl status postfix.service
在开机时启用一个服务:systemctl enable postfix.service
在开机时禁用一个服务:systemctl disable postfix.service
查看服务是否开机启动:systemctl is-enabled postfix.service;echo $?
查看已启动的服务列表:systemctl list-unit-files|grep enabled
说明:启用服务就是在当前逗runlevel地的配置文件目录/etc/systemd/system/multi-user.target.wants/里,建立/usr/lib/systemd/system里面对应服务配置文件的软链接;禁用服务就是删除此软链接。如图:

查看了/usr/lib/systemd/system 里的文件,语法跟旧版/etc/init.d/里的系统服务脚本完全不同了。
二、修改系统运行级别:
1、systemd使用比sysvinit的运行级更为自由的target替代。第3运行级用multi-user.target替代。第5运行级用graphical.target替代。runlevel3.target和runlevel5.target分别是指向 multi-user.target和graphical.target的符号链接。
可以使用下面的命令切换到逗运行级别3 地:
systemctl isolate multi-user.target或systemctl isolate runlevel3.target
可以使用下面的命令切换到逗运行级别5 地:
systemctl isolate graphical.target或systemctl isolate runlevel5.target
2、如何改变默认运行级别看
systemd使用链接来指向默认的运行级别。在创建新的链接前,可以通过下面命令删除存在的链接: rm /etc/systemd/system/default.target
默认启动运行级别3 :
ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
默认启动运行级别5 :
ln -sf /lib/systemd/system/graphical.target/etc/systemd/system/default.target
systemd不使用/etc/inittab文件。
3、如何查看当前运行级别看
旧的runlevel命令在systemd下仍然可以使用。可以继续使用它,尽管systemd使用 ‘target’ 概念(多个的 ‘target’ 可以同时激活)替换了之前系统的runlevel。
等价的systemd命令是systemctl list-units –type=target
三、其他配置工具:
1、setup和ntsysv工具还是保留了,但是功能已大大减弱,以前ntsysv工具可以控制所有系统服务的自启动,现在只能控制少部分服务。
2、/etc/resolv.conf这个DNS配置文件没变。
3、/etc/sysconfig/network-scripts/ifcfg-ens192网卡配置文件名字和一些选项有所变化。
4、引导方式改用grub2引导,grub2有如下特点:1、模块化设计;2、支持多体系硬件架构;3、支持国际化多语言;4、独立内存管理;5、支持脚本语言。
附:systemd简介
systemd是Linux下的一种init软件,由Lennart Poettering带头开发,并在LGPL 2.1及其后续版本许可证下开源发布。其开发目标是提供更优秀的框架以表示系统服务间的依赖关系,并依此实现系统初始化时服务的并行启动,同时达到降低Shell的系统开销的效果,最终代替现在常用的System V与BSD风格init程序。
与多数发行版使用的System V风格init相比,systemd采用了以下新技术:
采用Socket激活式与总线激活式服务,以提高相互依赖的各服务的并行运行性能;
用cgroups代替PID来追踪进程,以此即使是两次fork之后生成的守护进程也不会脱离systemd的控制。
从设计构思上说,由于systemd使用了cgroup与fanotify等组件以实现其特性,所以只适用于Linux。
参考技术A 这种说法大部分场合是不成立的,因为CentOS的主要特点是“可以作为RHEL的开源替代使用,是RHEL的社区重制版本“,在服务器上很常用,出于稳定可靠的角度,软件包和内核都相对旧得多。考虑到内核是发挥硬件性能的主要因素,建议还是用Archlinux、Fedora这类内核够新的发行版能够发挥足够硬件优势。(当然如果是没有图形界面的,硬件旧的设备,CentOS可能是最合适的)

iOS App性能提升的技巧

原文引用https://www.dazhuanlan.com/2019/08/26/5d62f6f027452/


/ OPTIMIZATION

25 iOS App Performance Tips & Tricks翻译了部分提高app性能的技巧

中阶性能提升建议

9)复用和延迟加载

更多的视图意味着更多的绘制,这些最终意味着更多CPU和内存的开销。在通过UIScrollView展示很多视图时开销尤为明显。

因此,效仿UITableView和UICollectionView的思路,并不在一开始就创建所有视图,在需要的展示时候创建,并不显示的视图加入重用队里里。

通过这个方法我们显示新的视图时,只需要设置复用视图的属性,而避免了新建视图会引起的内存分配和初始化开销。

延迟加载的方法也可以用在其它情景。比如你需要通过点击按钮来展示一个视图,至少有两种实现形式:

  1. 在页面加载时创建并隐藏。需要时再显示出来。
  2. 直到点击按钮时才创建并显示。

这两种方法各有优缺点。第一种会长期占用内存空间,但是显示速度快。第二种刚好相反,不占空间但展示慢。具体采用哪种方式可以根据应用场景权衡。

10)缓存、缓存、缓存

一项普遍的的开发经验就是”缓存那些有必要缓存的东西”,即缓存那些不太会改变但是经常访问的数据。 具体可以缓存什么数据呢?比如服务器返回的数据,图片,甚至是计算后的值如UITableView的高度。 NSURLConnection已经根据HTTP请求头将资源存储到本地或内存中,你甚至可以人为设置NSURLRequest,让它只访问缓存的数据。

	+ (NSMutableURLRequest *)imageRequestWithURL:(NSURL *)url {
	    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
	 
	    request.cachePolicy = NSURLRequestReturnCacheDataElseLoad; // 这一选项会总是返回缓存的图片
	    request.HTTPShouldHandleCookies = NO;
	    request.HTTPShouldUsePipelining = YES;
	    [request addValue:@"image/*" forHTTPHeaderField:@"Accept"];
	 
	    return request;
	}

注意,你可以用NSURLConnection来进行URL请求,同样AFNetworking也可以。而且你不需要改变什么代码,因为它已经做得足够好。

如果你想了解更多关于HTTP缓存的知识,可以涉猎NSURLCache,NSURLConnection等相关知识,确保浏览了NSHipster网站上的这篇文章 如果你需要缓存不包含在HTTp请求中的数据,可以涉猎NSCache。NSCache和NSDictionary表现的很像,但是当系统需要更多空间资源时,它会被释放。Matt Thompson在NSHipster写了一篇很赞的文章可以阅读一下。 想要了解更多关于HTTP缓存的知识,推荐阅读Google的《 best-practices document on HTTP caching》

11)考虑图形绘制

在iOS上有好几种方式可以实现漂亮的按钮。可以用全尺寸图片或可伸缩图片显示,再复杂点用CALayer,CoreGraphics甚至OpenGL来绘制。

这些效果的实现难度不同和当然性能也不同。有篇很棒的文章讲述iOS图形性能,很值得阅读。同时,苹果UIKit项目组的成员Andy Matuschak也针对这篇文章给出了深度的分析。

简而言之,使用图片是最快的,因为iOS省去了绘制图形的过程,直接将图片渲染到屏幕上。问题是你需要把所有的图片都放入bundle中,这增加了app的大小。所以使用可伸缩尺寸的图片来绘制按钮更好。iOS会帮你绘制那些重复的纹理。你也不用针对不同尺寸的元素(如按钮)生成不同的图片。

毕竟通过使用图片你可能会丧失图片微调的能力,当你需要对不同的场景对视图进行微调时,你依旧需要处理大量的图片,不能通过代码直接调整。这会是一个繁复的过程。

所以,在绘制性能和app大小上,你需要根据自己的需要进行折中。

高阶性能提升建议

22)提升进程启动速度

启动速度提升主要的核心在于避免阻塞主线程,异步处理繁重的任务,如网络请求、数据库操作或者解析数据。同时避免加载臃肿的XIB文档,XIB文档在主线程中加载,而storyboard不存在这个问题,有需要可以尽可能考虑storyboard。

23)使用Autorelease Pool

NSAutoreleasePool是用于释放对象的进程块。通常情况下由UIKit来调用。但是在有些场景中我们需要认为创建。

比如当你需要创建大量的临时对象时,内存使用量会因此飙升直到未来某时刻统一被UIKit释放。这就意味这些临时对象存在的时间比需要的时间长。所以我们需要手动及时地释放这些对象。

    NSArray *urls = <# An array of file URLs #>;
        for (NSURL *url in urls) {
            @autoreleasepool {
                NSError *error;
                NSString *fileContents = [NSString stringWithContentsOfURL:url
                                         encoding:NSUTF8StringEncoding error:&error];
            /* 处理数据或其它创建操作 */
        }
    }

24)选择性图片缓存

有两种常见的方式来加载app bundle中的图片。imageNamedimageWithContentsOfFile。前者会先从系统缓存中寻找图片对象,如果没有则创建新的对象并缓存,适用于频繁使用的图片。后者没有缓存机制,适合不常使用的资源消耗较大的图片。

25)避免使用Date Formatter

在大量需要用到NSDateFormatter的情景下,可使用类似单例的形式初始化,重复使用一个NSDateFormatter对象。如果想要进一步提高速度,则可以采用C语言的方式。还有一种更好的方式就是使用Unix timestamps。一个标示时间的浮点数,纪录了自1970年1月一日到现在的时间间隔。通过NSDate很容易的实现时间转换。

    - (NSDate*)dateFromUnixTimestamp:(NSTimeInterval)timestamp {
        return [NSDate dateWithTimeIntervalSince1970:timestamp];
    }

以上是关于CentOS7的性能是否提升很多的主要内容,如果未能解决你的问题,请参考以下文章

centos7.4安装MFS分布式文件系统

[Linux]centos7.6 step in system info

CentOS7上安装MySQL总结

Centos7 php 5.6.19编译安装

基于CentOS7的MySQL数据库主从备份

Centos7 部署 VerneMQ 高可用集群