性能调优

本来这次要写支付相关的话题,主要是这周是我分享,所以就来说说我上一家公司做的事吧

上一家公司同盾,做的一件事就是风控。哪有风险,哪就有风控。风控是app的一道防火墙。
之前所在的部门是企业组,主要是将风控产品输出给银行、互金平台等。这是一块大蛋糕,有很多的竞争对手。风控需要的是精准和快速,所以我们需要比别人更快,比别人更准。快、准、狠秒杀对手。
我主要的工作就是风控软件的性能调优,以下是我性能调优分享,不过不是具体怎么调优,而是调优的思路

什么是性能?(who)

性能调优,那么什么是性能?这里要讲的不是汽车发动机的性能,而是软件的性能。软件其实是看不见摸不着的,不同人对软件的理解也不一样,所以在不同人眼里,性能表现的形式就不一样

什么是性能

作为架构师(我的目标),在设计软件的架构的时候,就需要考虑到不同人眼里的问题----一切尽在掌握之中

什么是性能调优?(what)

我们知道软件是放在服务器上跑的,服务器又可分解为硬件和操作系统。


服务器

如上图,简单来说包括三块:硬件、操作系统、应用程序。其实,性能调优就是调节这些内容,包括硬件、操作系统、应用程序。

  • 硬件
    CPU、内存、磁盘、网卡、其它……,
  • 操作系统
    进程、虚拟内存、文件系统、网络、其它……,
  • 应用程序
    常见的有Apache、MySQL、Nginx、Memcahed等。

性能调优就是对计算机硬件、操作系统和应用有相当深入的了解,调节三者之间的关系,实现整个系统(包括硬件、操作系统、应用)的性能最大化。

为什么需要性能调优?(why)

场景一:当用户量达到一定数量时,应用就非常非常的慢。这时问老板能不能加机器。老板说,其他公司的服务也就一台服务器,别人行,我们为什么不行。坑我钱呢?(嘻嘻😁)

场景二:同样的需求,100个人实现,有100种不同的写法。有秒级的,有100毫秒级,有10毫秒级的,有1毫秒级的。这就是菜鸟与高手的区别。通过性能调优,能让我们了解底层的实现。

一、为了获得更好的系统性能(就是你现有的系统运行的还不错,但优化一下可以运行的更好)。
二、通过性能调优来了解底层原理

什么时候需要性能调优 (when)

作为我们程序员时时刻刻都应该对自己写的代码负责,不让自己的代码成为应用的瓶颈。


开个玩笑

什么地方需要性能调优?(where)

之前说来性能调优就是调节这些内容,包括硬件、操作系统、应用程序。那么调优地方当然是以下几点喽!

  • 硬件选型(根据服务器应用类型来选购服务器)
  • 操作系统调节系统参数
  • 组件 (Nginx、MySQL等)
  • 代码

怎么样进行性能调优?(how)

  • 性能指标 –> 确认衡量标准
  • 性能测试 –> 验证性能指标
  • 性能分析 –> 找出性能瓶颈
  • 性能调优 –> 解决性能问题
  • 性能监控 –> 检验调优效果,重复第三步骤

性能指标

  • 吞吐量
    是单位时间内完成的用户或系统的请求数量。
  • 并发数
    同时能接受多少用户的访问请求
  • 响应时间
    用户发出请求到收到响应的时间间隔。
  • 资源利用率
    机器操作系统的资源利用

一般我们以上面的几个指标评定软件的性能。这几个指标又有相互的制约,而我们需要寻找这样一个各个指标都相对满意的点。

响应时间--用户并发数

响应时间--用户并发数

响应时间一开始随着用户并发数的增加变化不大,当达到一个临界值时陡升

吞吐量--用户并发数

吞吐量--用户并发数

吞吐量一开始随着用户并发数的增加线性增长,当达到一个临界值时吞吐量不在变化,再增加用户并发数吞吐量出现下降

资源利用率--用户并发数

资源利用率--用户并发数

资源利用率一开始随着用户并发数的增加线性增长,当达到一个临界值时资源利用率达到饱和,不再变化

以上三张图在做性能压测时能很好的体现(这里不讲性能测试)。

硬件选型

硬件选型是在有限的资源下(金钱),选择最适合自己应用运行的硬件基础。(如果你是土豪那无所谓,反正贵总是有好处的)。

那么如何选择硬件呢?其实视自己在服务器上安装的应用或则组件决定。

  • 如果说是自己安装个简单的应用玩玩。那只需要购买能把应用跑起来,就差不多了。
  • 如果要安装个Mysql,那关注点是磁盘的转数,cpu普通的就行
  • 如果要安装个缓存,比方Memcache,那关注点是内存大小,cpu普通就行(缓存可能还需要好的网络,这个看你应用的瓶颈在哪)
  • 如果要安装个计算型的应用,那关注点是cpu,一般应用4G内存够了

总的来说就是:应用或组件依赖什么,那么我们就多花点钱,配好的。也不需要富的流油,够用就行

操作系统调节系统参数

操作系统Linux、windows,这些为什么还要调优呢?因为操作系统不是为你而设计的,而是为大多数人设计的。它要适应大众,才能普及推广啊。
服务器一般都是Linux操作系统,不过我对操作系统不是很熟。所以下面只讲我调节过的点。

系统句柄

Linux是有文件句柄限制的,一般都是1024,生产服务器用其实很容易就达到这个数量 是不是碰到过这些错误

java.lang.OutOfMemoryError:Unable to create new native thread 
Can’t open so many files 
too many open files

一个线程一个句柄,在高压情况下,线程数量超过了服务器的句柄限制

  • 查看当前使用的句柄数
cat /proc/sys/fs/file-nr
句柄数
  • 查看服务器句柄配置
ulimit -n
ulimit -a
  • 设置句柄数
vi /etc/security/limits.conf
*   soft noproc   65535  
*   hard noproc   65535  
*   soft nofile   65535  
*   hard nofile   65535 
说明:* 代表针对所有用户 
noproc 是代表最大进程数 
nofile 是代表最大文件打开数
修改完重新登录就可以见到,使用 ulimit -a 查看确认

交换区

swap空间是一块磁盘空间,操作系统使用这块空间保存从内存中换出的操作系统不常用page数据,这样可以分配出更多的内存做page cache。页面频繁换入换出会产生IO读写、操作系统中断,这些都很影响系统的性能。

所以在内存充足的情况下最好关闭

swapoff -a

组件

组件是支称应用性能的关键,所以选组件、配置参数至关重要

选组件

在强大的开源社区下,不同部位的组件可以有很多种选择。比如缓存有memcache、redis、tair、aerospike等,看得我们是眼花缭乱。其实它们有不同的特性,我相信开发者不肯能重复的造轮子,它们各有各适合的场景。而你是以你所面临的场景去选择它们。

以下是我选取组件的步骤

1、清楚的了解自己所面临的场景
2、根据场景抽取关键词,去google搜索。(因为自己的知识面不够广阔,不知道到底有哪些组件)
3、去官网查看它们的优点缺点,特意把缺点标黑,最会踩坑的地方
4、缩小组件范围
5、动手基准测试,有些东西官网很能吹的
6、深入了解

不过公司已经大面积使用的情况下,是不容许你更换组件的。那么我们只能依从,更关注使用方式和参数配置上去调节。

应用代码

代码调优,网上有很多。但是能熟练掌握不是一件容易的事,需要自己去尝试(我也还在积累经验的阶段)。不过最近我发现思想上的改变很重要,下面讲一下思想上的进步

首先我们要正视自己,我们现在处于什么阶段。我们需要脚踏实地,不要想着一开始就完美。我看过一本《程序员进阶攻略》把我思想洗脑了下


image.png

阶段

以下三个阶段都是我们在开发上的流程,其实也是我们程序员的程度阶段。

调试代码Debugging

第一层含义:调试代码或者不熟悉API
第二层含义:初入程序员行业,都是小心翼翼的。对自己写的代码不自信,需要不断的调试来纠正自己

编写代码Coding

第一层含义:编写业务代码
第二层含义:能独自完成业务代码,在实现需求的情况下追求可读性、可维护性。

运行代码Running

第一层含义:运行代码
第二层含义:在自己的脑袋中能运行程序,考虑到不同场景下的程序运行状况

所以理解来自己在哪一个阶段,在看下下一个阶段的要求,再去追求。当达到了,在进行下一个目标。(怎么跟实现梦想一样啊,先分解目标)

定位性能问题

之前的话由于监控系统没有,都是自己敲命令查询(好心酸,后来我也给他们搞了个监控系统)。下图是主要的一些命令

定位性能
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容

  • 声明:本文为学习总结篇,参考资料见文末,如有侵权请联系作者,调优实践总结篇可参考以往文章:JVM学习笔记与调优实战...
    Vechace阅读 898评论 0 1
  • 1.分配更多的资源 -- 性能调优的王道 真实项目里的脚本: bin/spark-submit \ --c...
    evan_355e阅读 1,842评论 0 0
  • JVM性能调优 1 堆设置调优 年轻代大小选择 响应时间优先的应用:尽可能设大,直到接近系统的最低响应时间限制(根...
    高广超阅读 4,204评论 0 21
  • 冥冥中~有安排 也许只是找个理由 欧体,哦,欧体 从今天起,有了一个小目标。
    野百合c阅读 161评论 0 0
  • Axure 用户名:Koshy 密 码: wTADPqxn3KChzJxLmUr5jTTitCgsfRkftQQ...
    前端阿帆阅读 1,498评论 0 1