最新公告:

新银河是诚信为本,市场在变,我们的诚信永远不变...

新银河(中国)股份有限公司官网

咨询热线

400-123-4657

新闻动态

当前位置: 首页 > 新闻动态

室内环境照度自动调节控制系统

添加时间:2025-02-12

真人百家家乐app

(19)中华人民共和国国家知识产权局

(12)发明专利申请

(10)申请公布号

(43)申请公布日2014.01.22

(21)申请号CN2.X

(22)申请日2013.10.22

(71)申请人长春轨道客车装备有限责任公司

地址吉林省长春市宽城区凯旋路2155号

(72)发明人刘锦辉;王恒环

(74)专利代理机构长春菁华专利商标代理事务所

代理人田春梅

(51)Int.CI

权利要求说明书说明书幅图

(54)发明名称

室内环境照度自动调节控制系统

(57)摘要

室内环境照度自动调节控制系统属于室内

灯光照度控制装置领域,该系统包括环境光感测

模块、中心控制模块、人体红外感测模块、LED

照明模块和电源模块;通过中心控制模块控制

LED照明模块亮灭及发光亮度,环境光感测模块

检测环境光的亮度,人体红外感测模块检测室内

是否有人体信号真人百家家乐app,中心控制模块可以同时接收环

境光感测模块和人体红外感测模块传来的感测信

号。该控制系统能够实时检测光线较亮的房间的

灯光照度值,同时,还能够实时监测较暗的房间

是否有人员进入,并通过延时、渐进式的灯光照

度控制方式,智能化的控制较暗的房间中的照明

灯的照度变化,缩小两个房间之间的光强反差,

大幅削弱和消除人眼的不适感,提高人感官的舒

适度和适应速度。

法律状态

法律状态公告日法律状态信息法律状态

真人百家家乐app,愿您夜夜笙歌,祝我们的祖国和平昌盛国泰民安

环境机 亿级用户性能压测调优方案

真人百家家乐app

1.背景

周年庆活动作为中心的一个重点项目,同时又是直接面向亿级C端用户,线上如果出任何问题,对公司的品牌形象等都有可能产生一定影响,因此中心给予了比较大的重视。经过我们的预估,该活动会存在比较大流量,所以为了保障这次活动能顶住大流量的冲击 ,就有了这次的性能极限调优。

这篇文章主要是分享除了常规的性能调优方案和一些其他更进阶的找问题、以及优化问题的手段,同样希望通过这篇文章的抛砖引玉,以后能够在大家进行性能调优时带来一些帮助。

1.1 环境&配置

机器配置:测试环境机器、4C4G

压测链路:上游服务 -> 发奖服务 -> [xxx券系统 | 下游A系统 | 下游B系统] -> 落库

压测配置:300线程,压测150s

1.2 目标

单机400左右,生产7000左右的TPS的目标

2. 压测调优之旅2.1 初次压测

第一次全链路压测大致的TPS: 88,TPS是未能破100的

这一阶段是任何优化都是没做,我们的整条链路也是比较重的,一个请求经过2个我们的服务,再调用3次其他周边系统,最后同步落库。所以性能比较差。

2.2 常规手段优化

1.开新接口:根据周年庆开门礼包业务场景(每人只能参加一次),开辟新的发奖接口(避免影响通用发奖平台接口)

2.走本地缓存:活动、礼包和礼品信息添加本地缓存,减少Redis的io操作和降低带宽压力

3.不查库:频率限制控制由查库统计改成查redis标识

4.异步:发奖记录由同步落库改成kafka异步落库

...

这些上述的操作都是比较常规、也是容易做到的调优手段,大体上都是缓存、异步、合并读写、调整线程数、精简业务等。

在这阶段优化后,TPS大致达到了200+,这里有个思考点:

1.性能优化的常规方案我懂,但是用完手段性能还上不去,该怎么办呢?

2.我的服务还有什么点可以优化呢,优化到哪里才是尽头呢,哪里才是极限呢?

其实到了这里大部分的优化就是止步于此,但是如果需要解决上面的两个点,那么就需要更多的定位、优化手段了。

3. 第一版优化 - 寻找偷懒的CPU3.1 寻找BLOCK线程

1.加密机性能瓶颈:

image.png

原因:这个瓶颈大致的原因就是加密机的性能不够,处理不过来,导致在竞争同一个锁的时候线程被挂起,这样大量的线程在等待锁,导致TPS上不去。

解决:

找加密机相关同事帮忙扩容加密机Mock掉加密机(这个只是临时处理办法,长期还是得靠第一种)

2.异步刷盘

在我们的理解中,lo4j2都是异步刷盘的,但是其实异步刷盘还有一个参数需要配置,不然每次还是同步刷盘,然后在高并发的情况下就会存在性能问题:

问题线程:

image.png

原因:这里当日志的 满了以后,会把所有生产日志的线程尝试获取全局中的同一个锁,这个锁获取也比较耗时,这样大量的线程同样BLOCK住,出现TPS上不去的问题。

解决:

image.png

减少无效的日志打印真人百家家乐app,精简日志输出

在打日志的地方加上为flase,这样每次就不是同步刷。但是这个异步刷也存在一定的日志丢失风险。 具体需要结合业务去评估,建议的话error为同步打印保证在真正出错误的时候日志能正常的打印方便定位问题,其他的warn、info考虑异步。

3.格式化日志锁问题:

下面的这行代码是一个返回的封装类,类似这种,所以每个请求都调用这个方法,在并发上来以后,去拿很容易出现锁竞争问题,因为这个对象处理有些耗时。

image.png

同步锁地方:

image.png

解决:

使用,底层无此问题。

2.对于公共组件,尽量不要自己造轮子,用公共平台的。这里的就是之前人封装的,导致有问题。

4.获取IP问题:

image.png

.()获取本机ip的时候,也存在同步锁,同时里面调用的找ip的操作是比较影响性能的。

解决: 取一次就缓存起来,不用每次取。

总结:

对于该类线程,我们发现大部分都是阻塞在了。所以对于在高并发的场景下我们需要慎用,这里有一点:并不可怕,可怕的里面有耗时的操作,因为一旦出现了里面的代码有任何耗时的操作,这个对性能的影响都是很夸张的。

例如300个线程,在一个方法里面有耗时20ms的操作,那么300个线程执行全部都执行一遍,那么就需要多出300 * 20ms - 20ms = (6s)的时间。

3.2 寻找其他偷懒状态的线程

除了BLOCK的线程,其实还有一些因为各式各样原因Sleep、或者IO阻塞的线程,也是可以根据线程状态查出,本次压测没有碰到(有些IO阻塞是因为下游返回的就是慢无法避免)。

3.3 测试环境发送Kafka,底层每次都是同步发送,性能较低

解决:先把数据放到本地队列,再批量发送。

注意:该方式存在一定的数据丢失风险,做该优化最好做好开关,正常情况下单条同步,压力实在比较大的时候开启批量。而且生产环境一般性能较高,这个点在生产不会成为很大的瓶颈点。

3.4 第一版本优化结论

经过上面的优化,我们的TPS从±200提升到了±360,提升了大约2倍。 这里的优化大部分是在测试环境上找到的。

主要优化点:在解决并发上来了,但是CPU并未打满,也就是CPU不干活(线程Block或者Sleep),把这些线程找出来,解决对应的问题。

但是这里只看线程,因为测试环境安全组要求,无法查看cpu火焰图等更加全面的采集信息。

4.第二版本优化 - 寻找做无效工的CPU4.1 前言

4C4U的机器目前单压在测试环境大概是在800的TPS,但是为了继续尝试更极限的TPS,所以我们再次进行更加深入的调优。 但是由于测试环境无法使用的采集CPU等数据,经过上面的第一版本优化BLOCK或者阻塞对性能影响很大的线程也基本不存在了,所以无法定位瓶颈了。

这个时候我们是不是就感觉已经到极限了,束手无策了呢?不!我们还可以继续优化,由于测试环境不能采集压测时候更加详细的指标,接下来压测转移到了本地的机器。

这次的目标就是:在CPU打满的情况下,我们就需要了解CPU到底是在做什么,然后解决掉无效的做工,这样TPS就上来了。

这里推荐使用IDE自带的 进行监控。关于 可以网上查一下。简单介绍一下它:从应用程序中记录运行时事件,同时也会记录JVM和OS的。记录的结果会存在一个单独的文件中,此文件可供开发工程师分析bug和性能问题。

4.2 压测环境

image.png

目前起400个线程压测

ps: 这里线程数其实偏大,正常4U8G 200个线程就足够了,例如一个请求100ms返回,那么1s就能处理10个,200个线程tps也能达到2000的QPS,对于业务链路重的接口,2000完全是不太可能达到的。

4.3 发现的问题

1.元空间初始值太小,导致2~3次的400ms的扩容 扩容图片:

image.png

同时观察了和,没有出现,也是比较正常。

解决:元空间的初始化值就设置大点(-XX:=256m),后续没再出现问题。 同时也稍微调大了年轻代的容量,减少了年轻代的GC频率。

2.-plus原生r插件对所有sql都会进行分页检测,消耗大量CPU,即使是不需要分页的sql。

image.png

解决:使用平台组的,能解决该问题,核心思路就是检查入参是否有Page分页参数,没有就不进行sql分页处理。

3.sys..code没有配置本系统的key,导致多次远程读取占用一定的CPU

解决:配置上conf--key

4.分布式锁,释放锁的时候,阻塞了线程

解决:释放锁的时候直接删除key,不采用lua脚本方式,lua脚本方式更加消耗CPU

5.其他占用CPU,但是业务需要无法优化的情况:

丰巢券对数据加密使用非对称方式,占用大量序列化目前的web框架调用链路长,零散的消耗也不少 等等

优化之前 :

TPS:102

image.png

优化之后:

image.png

TPS:219

出现了5%的错误率,这个是有些等待超时了,但是性能是提升了一倍。这个TPS可能和之前测试环境压测800的结论对不上,主要是因为环境不一样,本地和测试环境是没法直接去比较的。 但是从单一变量来看,同样的环境,修改完代码后压测,TPS上涨了近一倍,这个还是有一定的意义的。

4.4 第二版本优化结论:

经过这最后的这些调优,基本上就是到了目前极限的瓶颈了,CPU打满,并且CPU也在干"正事",这里的我认为不是正事的事就是:打印没有意义的日志,进行没有意义的序列化、反序列等。

但是调优其实是没有止境,这就跟木桶的原理一样,BLOCK线程之前是当前短板,把这块补上了,那么下一个短板可能又变成了是分页插件的问题,再优化下去可能就会是框架的调用层次太深等各式各样的问题。

同样的,对于我们的当前的系统,把当前的问题解决后,之前不是问题的问题就会变成新的问题。举个例子: 在我以前的一次极限压测中,就曾经发现过的ognl表达式也会成为CPU的瓶颈,但是在我们平常的系统中,这种写法是非常之常见的。

火焰图:

image.png

.xml:

image.png

这个情况下,这种大量的ognl标签,在解析的时候就会成为瓶颈,去掉这些没意义的ognl,当时我们的性能就提升了60%。

上面这些看法以及举证其实我是想表达出:很多我们习以为常的代码、以及框架等都是可能会成为瓶颈的,所以对于压测调优,我们要大胆猜想,用好工具,仔细验证。

4.第三版本优化思路

回到我们现在这次压测,如果还要更进一步的优化,我想到以下这些点:

5.总结5.1 测试环境问题加密机、下游接口等都可能出现高延迟,环境不稳定等导致线程阻塞、TPS上不去等问题。 针对这些不稳定因素都需要Mock掉,Mock时间按照生产P90+的耗时,只有单因子调试的仿真mock,这样才能保证压测的稳定。 这个点是非常重要的,因为不稳定的环境意味着每次的结果都是不稳定的,再加上多个性能瓶颈一起作用在结果上的时候,定位起来非常痛苦,也会让人无从下手。

2.测试环境各种agent探针比较多,例如:iast、、这些,建议可以先关掉,减少对性能影响,这些agent点大致会影响20%+的性能。

5.2 压测思路1.压测方案制定

如果链路长,建议一个个服务进行压测,其他依赖的服务可以进行Mock

如果性能一直上不去,建议先压空的服务,就是把抖动厉害的,外部因素排除掉,这样心里大致能了解到自己项目TPS的一个极限。

对于经常要调整的参数以及代码建议做成可配置的数据(比如:线程池大小、超时时间、是否调用下游的接口开关等),不然这样每改一次就发一次测试环境,效率及其低。

建议开发熟悉压测平台并且能把控压测节奏: 建议开发能自己用起压测平台来,因为在压测的时候,需要反复压测,同时需要很紧密的沟通,如果自己掌握压测的节奏,这样会更加高效。

2.压测方案的执行

压测进行中时,要根据之前制定方案的方案,比如先压哪个服务,Mock哪个服务等,按自己的步骤走,压测时优先先主流程压测,有瓶颈后再单服务压测,缩小扰乱因素。原则就是控制影响你的服务性能的单一变量, 然后针对这个单一的影响点多修改,多压测,观察性能。

5.3 如何寻找瓶颈

在随着并发上升,但是CPU利用率不高,或者并未打满,这个时候就说明CPU没有满负荷的运作,大概率线程由于竞争锁或者Sleep等操作导致有BLOCK、、IO阻塞状态, 这个时候可以打印出线程堆栈观察问题。

如果CPU打满了,但是TPS并不高或者想了解极限在哪,这个时候需要考虑点就是有很消耗CPU的操作了,比如CPU有大量的json序列化,做加解密等耗CPU、以及GC等操作, 那么就需要通过ide的 或者其他方式去寻找优化。

5.4 排查工具

在测试环境或者生产考虑的trace、、以及最新的的jfr命令来排查性能问题、

在本地压测的时候,使用 idea自带的 ,这个有很多信息,堆栈、CPU火焰图、GC情况、JVM情况、甚至是机器的一些写磁盘等事件, 这个会比较方便定位问题。

真人百家家乐app,愿您夜夜笙歌,祝我们的祖国和平昌盛国泰民安

联系我们

电话:400-123-4657

传真:+86-123-4567

地址:浙江 温州市 温州大道欧江大厦26188号

邮箱:admin@fago288.com

电话:400-123-4657 传真:+86-123-4567 地址:浙江 温州市 温州大道欧江大厦26188号
版权所有:Copyright © 2002-2025 凯发一触即发, 版权所有 非商用版本 ICP备案编号:粤IP**********