iis服务器助手广告广告
返回顶部
首页 > 资讯 > 操作系统 >linux中为什么要性能优化
  • 722
分享到

linux中为什么要性能优化

2023-06-15 21:06:48 722人浏览 八月长安
摘要

这篇文章主要介绍了linux中为什么要性能优化,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。为什么要性能优化也许是想要支持更高的吞吐量,想要更小的延迟,或者提高资源的利用率等

这篇文章主要介绍了linux中为什么要性能优化,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

为什么要性能优化

也许是想要支持更高的吞吐量,想要更小的延迟,或者提高资源的利用率等,这些都是性能优化的目标之一。不过需要提醒的是,不要过早的进行性能优化。如果当前并没有任何性能问题,又何必耗费这个精力呢?当前一些有助于提高性能的编码习惯还是可以时刻保持的。

目标

全面的性能优化不是一件简单的事情。本系列文章不在于介绍性能优化原理或者特定的算法优化。旨在分享一些实践中常用到的技巧,同时也主要关注CPU方面。

如何发现性能瓶颈

解决性能问题的第一步是发现性能问题。如何快速发现性能问题呢?对于本文来说,如何发现那些使CPU不停地瞎忙的代码呢?为什么这里是说让CPU瞎忙的代码?

举个例子,完成某个事情,你可能只需要一个CPU时间片,但是由于代码不够好,使得仍然需要多个CPU时间片。导致CPU非常忙碌,而无法继续提高它的效率。

top

这个命令相信大家都用过,可以实时看到进程的一些状态。它的使用方法有很多文章不厌其烦地对其进行了介绍,本文不打算进行介绍。我们可以通过top命令看到某个进程占用的CPU,但是CPU占用高并不代表它有性能问题,也有可能是CPU正在有效地高速运转,并没有占着茅坑不拉屎。

快速发现

想必我们都听过八二法则,同样的,80%的性能问题集中于20%的代码。因此我们只要找到这20%的部分代码,就可以有效地解决一些性能问题。

本文使用perf命令,它很强大,支持的参数也非常多,不过没关系,本文也没打算全部介绍。

系统中可能没有perf命令,ubuntu可以使用如下方法安装:

sudo apt install linux-tools-common

实例

直接来看示例吧。例子很简单,只是将字符串的字母转为大写罢了。当然了,很多人可能一眼就看出了哪里有性能问题,不过没关系,这个例子只是为了说明perf的应用。

 //toUpper.c #include<stdlib.h> #include<stdio.h> #include<time.h> #include<ctype.h> #include<string.h> #include<sys/time.h> #define MAX_LEN  1024*1024 void printCostTime(struct timeval *start,struct timeval *end) {     if(NULL == start || NULL == end)     {         return;     }     long cost = (end->tv_sec - start->tv_sec) * 1000 + (end->tv_usec - start->tv_usec)/1000;     printf("cost time: %ld ms\n",cost); } int main(void) {     srand(time(NULL));     int min = 'a';     int max = 'z';     char *str = malloc(MAX_LEN);     //申请失败则退出     if(NULL == str)     {         printf("failed\n");         return -1;     }     unsigned int i = 0;     while(i < MAX_LEN)//生成随机数     {         str[i] = ( rand() % ( max - min ) ) + min;         i++;     }     str[MAX_LEN - 1] = 0;      struct timeval start,end;     gettimeofday(&start,NULL);     for(i = 0;i < strlen(str) ;i++)     {         str[i]  = toupper( str[i] );     }     gettimeofday(&end,NULL);     printCostTime(&start,&end);     free(str);     str = NULL;     return 0; }

编译成可执行程序并运行:

GCc -o toUpper toUpper.c $ ./toUpper

这个时候我们用top查看结果发现toUpper程序占用CPU 100%:

$ top -p `pidof toUpper`   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND      24456 root       20   0    5248   2044    952 R 100.0  0.0   0:07.13 toUpper

打开另外一个终端,执行命令:

$ perf top -p `pidof toUpper` Samples: 1K of event 'cycles:ppp', Event count (approx.): 657599945 Overhead  Shared Object  Symbol   99.13%  libc-2.23.so   [.] strlen    0.19%  [kernel]       [k] perf_event_task_tick    0.11%  [kernel]       [k] prepare_exit_to_usermode    0.10%  libc-2.23.so   [.] toupper    0.09%  [kernel]       [k] rcu_check_callbacks    0.09%  [kernel]       [k] reweight_entity    0.09%  [kernel]       [k] task_tick_fair    0.09%  [kernel]       [k] native_write_msr    0.09%  [kernel]       [k] trigger_load_balance    0.00%  [kernel]       [k] native_apic_mem_write    0.00%  [kernel]       [k] __perf_event_enable    0.00%  [kernel]       [k] intel_bts_enable_local

其中pidof命令用于获取指定程序名的进程ID。

看到结果了吗?可以很清楚地看到,strlen函数占用了整个程序99%的CPU,那这个CPU的占用是否可以优化掉呢?我们现在都清楚,显然是可以的,在对每一个字符串进行大写转换时,都进行了字符串长度的计算,显然是没有必要,可以拿到循环之外的。

同时我们也关注到,这里面有很多符号可能完全没见过,不知道什么含义了,比例如reweight_entity,不过我们知道它前面有着kernel字样,因此也就明白,这是内核干的事情,仅此而已。

这里实时查看的方法,当然你也可以保存信息进行查看。

$ perf record -e cycles -p `pidof toUpper` -g -a

执行上面的命令一段时间,用于采集相关性能和符号信息,随后ctrl+c中止。默认当前目录下生成perf.data,不过这里面的数据不易阅读,因此执行:

$ perf report +  100.00%     0.00%  toUpper  [unknown]          [k] 0x03ee258d4c544155 +  100.00%     0.00%  toUpper  libc-2.23.so       [.] __libc_start_main +   99.72%    99.34%  toUpper  libc-2.23.so       [.] strlen      0.21%     0.02%  toUpper  [kernel.kallsyms]  [k] apic_timer_interrupt      0.19%     0.00%  toUpper  [kernel.kallsyms]  [k] smp_apic_timer_interrupt      0.16%     0.00%  toUpper  [kernel.kallsyms]  [k] ret_from_intr      0.16%     0.00%  toUpper  [kernel.kallsyms]  [k] hrtimer_interrupt      0.16%     0.00%  toUpper  [kernel.kallsyms]  [k] do_IRQ      0.15%     0.15%  toUpper  libc-2.23.so       [.] toupper      0.15%     0.00%  toUpper  [kernel.kallsyms]  [k] handle_irq      0.15%     0.00%  toUpper  [kernel.kallsyms]  [k] handle_edge_irq      0.15%     0.00%  toUpper  [kernel.kallsyms]  [k] handle_irq_event      0.15%     0.00%  toUpper  [kernel.kallsyms]  [k] handle_irq_event_percpu      0.14%     0.00%  toUpper  [kernel.kallsyms]  [k] __handle_irq_event_percpu      0.14%     0.01%  toUpper  [kernel.kallsyms]  [k] __hrtimer_run_queues      0.13%     0.00%  toUpper  [kernel.kallsyms]  [k] _rtl_pci_interrupt

其中-g参数为了保存调用调用链,-a表示保存所有CPU信息。

因此就可以看到采样信息了,怎么样是不是很明显,其中的+部分还可以展开,看到调用链。

例如展开的部分信息如下:

-  100.00%     0.00%  toUpper  libc-2.23.so       [.] __libc_start_main            - __libc_start_main                                                                  99.72% strlen

当然了,实际上你也可以将结果重定向到另外一个文件,便于查看:

$ perf report > result $ more result # Event count (approx.): 23881569776 # # Children      Self  Command  Shared Object      Symbol                          # ........  ........  .......  .................  .............................. ................... #    100.00%     0.00%  toUpper  [unknown]          [k] 0x03ee258d4c544155             |             ---0x3ee258d4c544155                __libc_start_main                |                           --99.72%--strlen     100.00%     0.00%  toUpper  libc-2.23.so       [.] __libc_start_main             |             ---__libc_start_main                |                           --99.72%--strlen      99.72%    99.34%  toUpper  libc-2.23.so       [.] strlen             |                        --99.34%--0x3ee258d4c544155

感谢你能够认真阅读完这篇文章,希望小编分享的“linux中为什么要性能优化”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网操作系统频道,更多相关知识等着你来学习!

--结束END--

本文标题: linux中为什么要性能优化

本文链接: https://www.lsjlt.com/news/281658.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • linux中为什么要性能优化
    这篇文章主要介绍了linux中为什么要性能优化,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。为什么要性能优化也许是想要支持更高的吞吐量,想要更小的延迟,或者提高资源的利用率等...
    99+
    2023-06-15
  • Hibernate性能优化要考虑什么
    本篇内容主要讲解“Hibernate性能优化要考虑什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Hibernate性能优化要考虑什么”吧!Hibernate是对JDBC的轻量级封装,因此在很...
    99+
    2023-06-17
  • Linux系统性能优化的两个重要参数是什么
    这篇文章主要讲解了“Linux系统性能优化的两个重要参数是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux系统性能优化的两个重要参数是什么”吧!代码如下:vfs_cache_pr...
    99+
    2023-06-13
  • C++性能优化在现代软件开发中的重要性是什么?
    c++++ 性能优化在现代软件开发中至关重要,可带来应用程序响应时间更短、内存占用更少、系统效率更高的优势。优化技巧包括内存管理、数据结构选择、算法优化、并行编程和代码分析。通过采用分治...
    99+
    2024-05-08
    c++ 性能优化 内存占用
  • 网页设计中为什么要优化代码
    这篇文章主要介绍了网页设计中为什么要优化代码,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。由于网络是一个不断变化和不断发展的有机体,所以建立一个能和网络一起变化、成长的网站是...
    99+
    2023-06-12
  • PHP 数组在 Linux 中的性能优化?
    PHP 数组是 PHP 语言中最常用的数据结构之一,它可以存储多个数据元素,并且可以根据下标来访问这些元素。在 PHP 中,数组可以通过多种方式创建和操作,但是在 Linux 环境下,我们需要注意一些性能问题。 使用合适的数组函数 P...
    99+
    2023-06-18
    linux 数组 npm
  • PostgreSQL中怎么优化性能
    要优化PostgreSQL数据库的性能,可以采取以下几种方法: 确保数据库服务器的硬件配置足够强大,包括CPU、内存、磁盘等方面的...
    99+
    2024-04-09
    PostgreSQL
  • Vue.js中怎么优化性能
    这篇文章主要介绍“Vue.js中怎么优化性能”,在日常操作中,相信很多人在Vue.js中怎么优化性能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue.js中怎么优化性能”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-30
  • Tomcat中性能优化的方法是什么
    调整JVM参数:通过调整JVM参数来优化Tomcat的性能,可以提高Tomcat的运行效率。例如增加堆内存大小、调整垃圾回收策略...
    99+
    2024-04-03
    Tomcat
  • Linux系统中PostgreSQL的性能如何优化
    要优化Linux系统中PostgreSQL的性能,可以采取以下几个方面的措施: 调整内核参数:可以通过修改Linux内核参数来优...
    99+
    2024-05-06
    Linux PostgreSQL
  • Linux容器中的PHP:如何优化性能?
    随着容器技术的兴起,越来越多的应用程序被迁移到了容器中运行。在容器中运行PHP应用程序也是一种常见的使用方式。但是,由于容器资源限制和共享环境的特殊性,PHP应用程序在容器中的性能优化也是一个重要的问题。在本文中,我们将介绍一些优化技巧和...
    99+
    2023-07-25
    linux linux 容器
  • Vue性能优化方法是什么
    本篇内容主要讲解“Vue性能优化方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue性能优化方法是什么”吧!一、代码层面的优化1.1、v-if 和 v-show 区分使用场景v-if&...
    99+
    2023-07-04
  • Android性能优化机制是什么
    Android性能优化机制是一系列的技术和策略,旨在提高Android设备的响应速度、能耗效率和用户体验。以下是一些常见的Andro...
    99+
    2023-10-24
    Android
  • Mysql 中怎么优化insert性能
    本篇文章为大家展示了Mysql 中怎么优化insert性能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Mysql优化之加速INSERT插入一条记录花费的时间由以下...
    99+
    2024-04-02
  • 网站为什么需要优化404页面
    网站需要对404页面进行优化的原因避免网站出现死链网站运营的过程中,死链的产生是难以避免的,当网站没有设置404页面,搜索引擎抓取该页面时,只能获得错误链接,并为此链接建立一个错误索引,会导致搜索引擎对网站的信任度大幅度降低,会降低搜索引擎...
    99+
    2024-04-02
  • 为什么做SEO优化要用VPS主机
    做SEO优化要用VPS主机的原因:1、VPS主机拥有独立IP资源,实现一个IP对应一个网站,容易获得搜索引擎的信任,有利于SEO优化;2、租用VPS主机搭建网站安全性更高、稳定性更强,有利于提升网站排名与权重,从而有效帮助VPS用户拓展业务...
    99+
    2024-04-02
  • spark性能优化要注意哪几点
    spark性能优化要注意哪几点,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一.优化方向,序列化1.官网位置2.解释:默认用的是java序列化,但是会很慢,第二...
    99+
    2023-06-02
  • 网站性能优化的关键要点
    如何优化网站性能的重要注意事项 随着互联网的快速发展,越来越多的人开始关注网站的用户体验和性能。一个高效的网站不仅能够吸引更多的访问者,还能提升用户满意度和留存率。而网站性能优化则成为了实现这一目标的关键步骤。本文将介绍一些重要...
    99+
    2024-02-02
    缓存 压缩 减少请求
  • PHP 应用程序性能优化中 Composer 的性能优化技巧
    composer 优化技巧:禁用自动加载,避免在编译时加载不必要的类。使用 composer optimize 命令生成优化文件,减少加载类的时间。限制依赖项更新,避免频繁重新生成锁定文...
    99+
    2024-05-01
    php composer 内存占用
  • Golang 技术性能优化中如何整合性能优化工具?
    Golang 技术性能优化中整合性能优化工具 在 Golang 应用中,性能优化至关重要,而借助性能优化工具可以极大地提升此过程的效率。本文将指导您逐步整合流行的性能优化工具,以帮助您...
    99+
    2024-05-12
    golang 性能优化 git
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作