精华内容
下载资源
问答
  • 一个网页打开很慢的分析过程 页面打开慢的原因有网络问题、渲染问题、代码问题等等 1、查看网络情况 打开chrome浏览器的开发者选项,选择Network菜单,刷新页面,对请求情况进行分析,记录DOMContentLoaded时间、...

    一个网页打开很慢的分析过程

    页面打开慢的原因有网络问题、渲染问题、代码问题等等
    1、查看网络情况
    打开chrome浏览器的开发者选项,选择Network菜单,刷新页面,对请求情况进行分析,记录DOMContentLoaded时间、Load时间、页面文件大小
    找出无效的请求、失败的请求、耗时长的、文件大的资源,并按分类统计请求数量
    无效的请求、失败的请求:查明原因并解决,如地址失效、拼写错误等
    耗时长的请求:分析timing菜单,耗时的部分在哪里,等待时间长,寻求后端一起解决、或用多个域进行资源请求
    文件大的资源:检查代码是否压缩、传输时是否使用gzip进行压缩,文件是否拆分,如果有第三方类库可以提出来使用CDN引入
    如果有很多小的图片资源:可以考虑图片合并,或是bese64的方式
    2、渲染问题
    把css文件放到head部分
    Js放到底部
    3、代码问题
    精简代码dom层级、数量
    避免使用table、iframe标签
    使用精确的css类名,去除多余无用的选择器层级

    展开全文
  • IDEA build artifacts过程很慢的解决方案

    千次阅读 2019-08-15 13:03:33
    以下是几个解决方案,可以尝试: ...重启之后,会重建索引,此过程较, 但build的过程会加快。 二、进入file->Project Structure->Modules->选中项目名称-paths,把Exclude Output paths 打...

    以下是几个解决方案,可以尝试:

    一、可能是缓存的文件太多了导致,file->Invalidate Caches /Restart,清理缓存, 并重启IDEA。重启之后,会重建索引, 此过程较慢, 但build的过程会加快。

    二、进入file->Project Structure->Modules->选中项目名称-paths,把Exclude Output paths 打钩。

    三、检查pom.xml resources是否正确,把无用的注释掉。

    展开全文
  • 当用户移开遮挡后发现屏幕再次点亮时间较,约1s以上。用户感觉不爽。因为别人手机明显别这要快。 有户怀疑是p-sensor反应引起。所以问题交给了我。 虽然我知道这一定和p-sensor没什么关系。(因为 P ...

    问题描述:

    用户接通电话后,遮挡接近传感器,屏幕关闭。当用户移开遮挡后发现屏幕再次点亮的时间较慢,约1s以上。用户感觉很不爽。因为别人的手机明显别这要快。

    有户怀疑是p-sensor反应慢引起的。所以问题交给了我。

    虽然我知道这一定和p-sensor没什么关系。(因为 P 已经被我调教的很到位了。。)

    本着迎难而上的无畏精神。。。

    我昨晚仔细思考了以下,终于搞定!

    以下是我给出的结论。。直接粘过来吧。呵呵

    ========================================================================

    分析:

    打电话过程中,当用户遮挡P-sensor时,系统的early_suspend流程开始动作,调
    用各类设备注册的early_suspend函 数,有些设备在该函数中可动有休眠或者断电
    动作。
    当用户移开遮挡时,系统的late_resume流程开始动作,调用各类设备注册的
    late_resume函数,很多设备在这个函数中可能会有 init操作,因此,可能会包含
    延时。

    根本原因:
    该问题是由于late_resume过程中的相关调用延时所致。
    唤醒过程总耗时1196 ms,用户必然感觉很慢。
    上述标记处(附件文档)需要找相关工程师确认,看能否在late_resume调用过程中减少延时。
    尤其是影响较大的BEKEN_FM 模块400ms, lcd_hx8362_rgb_spi 模块264ms, 电容
    屏模块158ms, mmc累计也达150ms

    建议:
    考虑部分模块是否有必要注册early_suspend流程。
    部分模块的late_resume过程是否需要重新初始化,是否可避免。


    顺便说下,这个问题和P-sensor没有丝毫关系。。。。。。

    =================================================================================

    log分析过程:


    <3>0[ 118.759537] yasin test late resume START...******************************************

    <4>0[ 118.759652] late_resume: calling ltr558_late_resume

    <6>0[ 118.759697] [LTR588_INFO] ltr558_late_resume

    <4>0[ 118.759741] late_resume: calling ltr558_late_resume done

    <4>0[ 118.759800] late_resume: calling xxxxfb_late_resume

    <4>0[ 118.759846] xxxxfb: [xxxxfb_late_resume]

    <6>0[ 118.759887] xxxxfb:[xxxxfb_dispc_resume], dev->enable= 0

    <6>0[ 118.759955] xxxxfb:[xxxxfb_dispc_resume] not from deep sleep

    <6>0[ 118.760007] xxxxfb:[xxxxfb_panel_resume], dev->enable= 0,from_deep_sleep = 1

    <4>0[ 118.760176] xxxxFB [SPI_ClkSetting], clk src is 0 clk div is 0

    <4>0[ 118.760184]

    12ms

    <6>1[ 118.772852] [LTR588_INFO] ltr558_als_enable, gainrange=2, ret = 1

    <3>1[ 118.774653] Kb_SetBackLightBrightness: Set KPLED_CTL : 0x1020

    <3>1[ 118.774664]

    136ms

    <6>1[ 118.910688] request_suspend_state: wakeup (0->0) at 118901435212(2012-01-01 00:02:59.034057661 UTC)

    50ms

    <4>1[ 118.960943] hx8362_init

    264ms lcd_hx8362_rgb_spi

    <4>1[ 119.224490] RTL871X: module init start version:v4.1.3_6228.20121226

    <4>1[ 119.224621] clock:0, host->clock:0, AHB_CTL0:0x1a400160

    <4>1[ 119.224677] clock:0, host->clock:0, SDHCI_CLOCK_CONTROL:0x0

    <3>1[ 119.224740] _regulator_get: get() with no identifier

    <3>1[ 119.224788] mmc2: no vmmc regulator found

    <4>1[ 119.224830] mmc2, power:12, set regulator voltage:3000000

    17ms

    <4>1[ 119.241441] ******* mmc2, call clk_enable*******

    <4>1[ 119.241524] clock:400000, host->clock:0, AHB_CTL0:0x1a480160

    <4>1[ 119.241577] clock:400000, host->clock:0, SDHCI_CLOCK_CONTROL:0x0

    25ms

    <4>1[ 119.266095] sdhci_bus_scan, entry

    <4>1[ 119.266154] clock:1, host->clock:400000, AHB_CTL0:0x1a480160

    <4>1[ 119.266206] clock:1, host->clock:400000,SDHCI_CLOCK_CONTROL:0x2007

    <7>1[ 119.266261] sdhci: =========== REGISTER DUMP (mmc2)===========


    AHB_CTL0:0x1a480160

    <4>1[ 119.267008] INTC0_EN:0xe4184c4

    <4>1[ 119.267040] INTC1_EN:0x3c4058

    <4>1[ 119.267072] GIC_INT_EN:0xffff

    <4>1[ 119.267103] GIC_INT_EN:0x8e61c4c4

    <4>1[ 119.267136] GIC_INT_EN:0x63c40d8

    <4>1[ 119.267182] ANA_REG_GLB_LDO_PD_CTRL1:0x2019

    <4>1[ 119.267228] ANA_REG_GLB_LDO_VCTRL4:0x9009

    <7>1[ 119.267267] sdhci: ===========================================

    <7>1[ 119.267323] sdhci: =========== REGISTER DUMP (mmc2)===========

    <7>1[ 119.267375] sdhci: 0x00000000 | 0x00000000 | 0x00000000 | 0x00000000


    <7>1[ 119.267977] sdhci: 0x00000000 | 0x00000000 | 0x00000000

    AHB_CTL0:0x1a480160

    <4>1[ 119.268065] INTC0_EN:0xe4184c4

    <4>1[ 119.268097] INTC1_EN:0x3c4058

    <4>1[ 119.268128] GIC_INT_EN:0xffff

    <4>1[ 119.268159] GIC_INT_EN:0x8e61c4c4

    <4>1[ 119.268192] GIC_INT_EN:0x63c40d8

    <4>1[ 119.268232] ANA_REG_GLB_LDO_PD_CTRL1:0x2019

    <4>1[ 119.268278] ANA_REG_GLB_LDO_VCTRL4:0x9009

    <7>1[ 119.268317] sdhci: ===========================================

    <6>0[ 119.268446] mmc2 mmc_rescan

    <4>0[ 119.268623] mmc2: !!!!! error in sending cmd:7, int:0x10000, err:-110

    <7>0[ 119.268682] sdhci: =========== REGISTER DUMP (mmc2)===========

    <7>0[ 119.268735] sdhci: 0x00000000 | 0x00000000 | 0x00010000 | 0x071a0000


    <7>0[ 119.269330] sdhci: 0x00000000 | 0x00000000 | 0x00000000

    AHB_CTL0:0x1a480160

    <4>0[ 119.269416] INTC0_EN:0xe4184c4

    <4>0[ 119.269447] INTC1_EN:0x3c4058

    <4>0[ 119.269478] GIC_INT_EN:0xffff

    <4>0[ 119.269508] GIC_INT_EN:0x8e61c4c4

    <4>0[ 119.269541] GIC_INT_EN:0x63440d8

    <4>0[ 119.269581] ANA_REG_GLB_LDO_PD_CTRL1:0x2019

    <4>0[ 119.269626] ANA_REG_GLB_LDO_VCTRL4:0x9009

    <7>0[ 119.269663] sdhci: ===========================================

    <4>1[ 119.269852] mmc2: !!!!! error in sending cmd:7, int:0x10000, err:-110

    <7>1[ 119.269908] sdhci: =========== REGISTER DUMP (mmc2)===========

    <7>1[ 119.269961] sdhci: 0x00000000 | 0x00000000 | 0x00010000 | 0x071a0000

    <7>1[ 119.269970]


    <7>1[ 119.270493]

    <7>1[ 119.270559] sdhci: 0x00000000 | 0x00000000 | 0x00000000

    AHB_CTL0:0x1a480160

    <4>1[ 119.270644] INTC0_EN:0xe4184c4

    <4>1[ 119.270676] INTC1_EN:0x3c4058

    <4>1[ 119.270707] GIC_INT_EN:0xffff

    <4>1[ 119.270738] GIC_INT_EN:0x8e61c4c4

    <4>1[ 119.270771] GIC_INT_EN:0x63440d8

    <4>1[ 119.270810] ANA_REG_GLB_LDO_PD_CTRL1:0x2019

    <4>1[ 119.270855] ANA_REG_GLB_LDO_VCTRL4:0x9009

    <7>1[ 119.270892] sdhci: ===========================================

    4ms

    <4>1[ 119.274599] mmc2: !!!!! error in sending cmd:7, int:0x10000, err:-110

    <7>1[ 119.274672] sdhci: =========== REGISTER DUMP (mmc2)===========

    <7>1[ 119.274725] sdhci: 0x00000000 | 0x00000000 | 0x00010000 | 0x071a0000


    <7>1[ 119.275272]

    <7>1[ 119.275339] sdhci: 0x00000000 | 0x00000000 | 0x00000000

    AHB_CTL0:0x1a480160

    <4>1[ 119.275426] INTC0_EN:0xe4184c4

    <4>1[ 119.275458] INTC1_EN:0x3c4058

    <4>1[ 119.275488] GIC_INT_EN:0xffff

    <4>1[ 119.275519] GIC_INT_EN:0x8e61c4c4

    <4>1[ 119.275552] GIC_INT_EN:0x63440d0

    <4>1[ 119.275601] ANA_REG_GLB_LDO_PD_CTRL1:0x2019

    <4>1[ 119.275653] ANA_REG_GLB_LDO_VCTRL4:0x9009

    <7>1[ 119.275692] sdhci: ===========================================

    <4>1[ 119.276854] mmc2: !!!!! error in sending cmd:7, int:0x10000, err:-110

    <7>1[ 119.276922] sdhci: =========== REGISTER DUMP (mmc2)===========

    <7>1[ 119.276977] sdhci: 0x00000000 | 0x00000000 | 0x00010000 | 0x071a0000


    <7>1[ 119.277520]

    <7>1[ 119.277586] sdhci: 0x00000000 | 0x00000000 | 0x00000000

    AHB_CTL0:0x1a480160

    <4>1[ 119.277673] INTC0_EN:0xe4184c4

    <4>1[ 119.277704] INTC1_EN:0x3c4058

    <4>1[ 119.277735] GIC_INT_EN:0xffff

    <4>1[ 119.277766] GIC_INT_EN:0x8e61c4c4

    <4>1[ 119.277799] GIC_INT_EN:0x63440d0

    <4>1[ 119.277842] ANA_REG_GLB_LDO_PD_CTRL1:0x2019

    <4>1[ 119.277888] ANA_REG_GLB_LDO_VCTRL4:0x9009

    <7>1[ 119.277926] sdhci: ===========================================

    <6>0[ 119.278384] mmc2: card 0001 removed

    <7>0[ 119.278648] sdhci: =========== REGISTER DUMP (mmc2)===========

    <7>0[ 119.278713] sdhci: 0x00000000 | 0x00000000 | 0x00010000 | 0x071a0000


    <7>0[ 119.279254]

    <7>0[ 119.279321] sdhci: 0x00000000 | 0x00000000 | 0x00000000

    AHB_CTL0:0x1a480160

    <4>0[ 119.279418] INTC0_EN:0xe4184c4

    <4>0[ 119.279450] INTC1_EN:0x3c4058

    <4>0[ 119.279481] GIC_INT_EN:0xffff

    <4>0[ 119.279512] GIC_INT_EN:0x8e61c4c4

    <4>0[ 119.279545] GIC_INT_EN:0x63c40d8

    <4>0[ 119.279589] ANA_REG_GLB_LDO_PD_CTRL1:0x2019

    <4>0[ 119.279635] ANA_REG_GLB_LDO_VCTRL4:0x9009

    <7>0[ 119.279672] sdhci: ===========================================

    <7>0[ 119.279727] sdhci: =========== REGISTER DUMP (mmc2)===========

    <7>0[ 119.279779] sdhci: 0x00000000 | 0x00000000 | 0x00000000 | 0x00000000


    <7>0[ 119.280376] sdhci: 0x00000000 | 0x00000000 | 0x00000000

    AHB_CTL0:0x1a480160

    <4>0[ 119.280462] INTC0_EN:0xe4184c4

    <4>0[ 119.280493] INTC1_EN:0x3c4058

    <4>0[ 119.280524] GIC_INT_EN:0xffff

    <4>0[ 119.280555] GIC_INT_EN:0x8e61c4c4

    <4>0[ 119.280587] GIC_INT_EN:0x63c40d8

    <4>0[ 119.280627] ANA_REG_GLB_LDO_PD_CTRL1:0x2019

    <4>0[ 119.280671] ANA_REG_GLB_LDO_VCTRL4:0x9009

    <7>0[ 119.280709] sdhci: ===========================================

    <4>0[ 119.280902] ******* mmc2, call clk_disable*******

    <4>0[ 119.280956] clock:0, host->clock:0, AHB_CTL0:0x1a400160

    <4>0[ 119.281008] clock:0, host->clock:0, SDHCI_CLOCK_CONTROL:0x0

    <3>0[ 119.281061] _regulator_get: get() with no identifier

    <3>0[ 119.281106] mmc2: no vmmc regulator found

    <4>0[ 119.281144] mmc2, power:0, set regulator voltage:0

    3ms

    <4>0[ 119.283940] clock:0, host->clock:0, AHB_CTL0:0x1a400160

    <4>0[ 119.284007] clock:0, host->clock:0, SDHCI_CLOCK_CONTROL:0x0

    <3>0[ 119.284067] _regulator_get: get() with no identifier

    <3>0[ 119.284113] mmc2: no vmmc regulator found

    <4>0[ 119.284154] mmc2, power:12, set regulator voltage:3000000

    17ms

    <4>0[ 119.301280] ******* mmc2, call clk_enable*******

    <4>0[ 119.301351] clock:400000, host->clock:0, AHB_CTL0:0x1a480160

    <4>0[ 119.301403] clock:400000, host->clock:0, SDHCI_CLOCK_CONTROL:0x0

    3ms

    <6>1[ 119.304988] xxxxfb:[xxxxfb_dispc_resume], leave dev->enable= 1

    <4>1[ 119.305068] late_resume: calling xxxxfb_late_resume done

    <4>1[ 119.305124] late_resume: calling start_drawing_late_resume

    4ms

    <4>1[ 119.309534] late_resume: calling start_drawing_late_resume done

    <4>1[ 119.309939] late_resume: calling ft5x0x_ts_resume

    <4>1[ 119.310030] ==ft5x0x_ts_resume==

    10ms

    <4>0[ 119.321319] mmc2, ****************** sdhci_hw_reset, callmmc_power_off ***********

    <7>0[ 119.321423] sdhci: =========== REGISTER DUMP (mmc2)===========

    <7>0[ 119.321479] sdhci: 0x00000000 | 0x00000000 | 0x00000000 | 0x00000000


    <7>0[ 119.322024]

    <7>0[ 119.322092] sdhci: 0x00000000 | 0x00000000 | 0x00000000

    AHB_CTL0:0x1a680160

    <4>0[ 119.322181] INTC0_EN:0xe4184c4

    <4>0[ 119.322213] INTC1_EN:0x3c4058

    <4>0[ 119.322244] GIC_INT_EN:0xffff

    <4>0[ 119.323330] GIC_INT_EN:0x8e61c4c4

    <4>0[ 119.323368] GIC_INT_EN:0x63c40d8

    <4>0[ 119.323417] ANA_REG_GLB_LDO_PD_CTRL1:0x2019

    <4>0[ 119.323463] ANA_REG_GLB_LDO_VCTRL4:0x9009

    <7>0[ 119.323501] sdhci: ===========================================

    <7>0[ 119.323557] sdhci: =========== REGISTER DUMP (mmc2)===========

    <7>0[ 119.323609] sdhci: 0x00000000 | 0x00000000 | 0x00000000 | 0x00000000


    <7>0[ 119.324213]

    <7>0[ 119.324283] sdhci: 0x00000000 | 0x00000000 | 0x00000000

    AHB_CTL0:0x1a680160

    <4>0[ 119.324369] INTC0_EN:0xe4184c4

    <4>0[ 119.324401] INTC1_EN:0x3c4058

    <4>0[ 119.324432] GIC_INT_EN:0xffff

    <4>0[ 119.324462] GIC_INT_EN:0x8e61c4c4

    <4>0[ 119.324495] GIC_INT_EN:0x63c40d8

    <4>0[ 119.324535] ANA_REG_GLB_LDO_PD_CTRL1:0x2019

    <4>0[ 119.324580] ANA_REG_GLB_LDO_VCTRL4:0x9009

    <7>0[ 119.324618] sdhci: ===========================================

    <4>0[ 119.324670] ******* mmc2, call clk_disable*******

    <4>0[ 119.324721] clock:0, host->clock:0, AHB_CTL0:0x1a600160

    <4>0[ 119.324768] clock:0, host->clock:0, SDHCI_CLOCK_CONTROL:0x0

    <3>0[ 119.324821] _regulator_get: get() with no identifier

    <3>0[ 119.324866] mmc2: no vmmc regulator found

    <4>0[ 119.324904] mmc2, power:0, set regulator voltage:0

    17ms

    <4>0[ 119.341363] mmc2, ****************** sdhci_hw_reset, callmmc_power_up ***********

    <4>0[ 119.341469] clock:0, host->clock:0, AHB_CTL0:0x1a600160

    <4>0[ 119.341517] clock:0, host->clock:0, SDHCI_CLOCK_CONTROL:0x0

    <3>0[ 119.341571] _regulator_get: get() with no identifier

    <3>0[ 119.341616] mmc2: no vmmc regulator found

    <4>0[ 119.341656] mmc2, power:12, set regulator voltage:3000000

    20ms

    <4>1[ 119.361502] ******* mmc2, call clk_enable*******

    <4>1[ 119.361583] clock:400000, host->clock:0, AHB_CTL0:0x1a680160

    <4>1[ 119.361635] clock:400000, host->clock:0, SDHCI_CLOCK_CONTROL:0x0

    20ms

    <4>1[ 119.381568] mmc2, ****************** sdhci_hw_reset, set cmd anddata***********

    <4>1[ 119.381654] mmc2, ****************** sdhci_hw_reset ***********

    7ms

    <4>0[ 119.388885] clock:16000000, host->clock:400000,AHB_CTL0:0x1a680160

    <4>0[ 119.388950] clock:16000000, host->clock:400000,SDHCI_CLOCK_CONTROL:0x2007

    6ms

    <6>0[ 119.394453] mmc2: new high speed SDIO card at address 0001

    158ms 电容屏

    <4>1[ 119.552293] late_resume: calling ft5x0x_ts_resume done

    <4>1[ 119.552380] late_resume: calling xxxx_led_late_resume

    <6>1[ 119.552427] xxxx_led_late_resume

    <3>1[ 119.552504] Kb_SetBackLightBrightness: Set KPLED_CTL : 0x1020

    <3>1[ 119.552513]

    <4>1[ 119.552577] late_resume: calling xxxx_led_late_resume done

    <4>1[ 119.552630] late_resume: calling beken_early_resume

    <4>1[ 119.552676] beken_early_resume.

    <6>1[ 119.552715] BEKEN_FM 2-0070: beken_resume, FM opened before suspend:0

    <3>1[ 119.552773] BEKEN_FM 2-0070: FM chip open!!!!

    <3>1[ 119.552815] BEKEN_FM 2-0070: FM open: bk1080_init!!!!

    <6>1[ 119.553627] BEKEN_FM 2-0070: BK1080 id:0x1080

    400ms Beken FM

    <3>1[ 119.953873] BEKEN_FM 2-0070: FM open: FM is opened

    <6>1[ 119.955144] BEKEN_FM 2-0070: FM close: beken will run standby.

    <4>1[ 119.955211] late_resume: calling beken_early_resume done

    <4>1[ 119.955270] late_resume: calling xxxx_backlight_late_resume

    <6>1[ 119.955319] xxxx_backlight_late_resume

    <3>1[ 119.955360] *********************************yasin test setbrightness = 102

    <4>1[ 119.955422] late_resume: calling xxxx_backlight_late_resume done

    <3>1[ 119.955473]

    <3>1[ 119.955477]

    <3>1[ 119.955481] yasin test late resume DONE...******************************************




    唤醒过程总耗时1196ms,这就是屏幕点亮很慢的原因。

    上述标记处需要找相关工程师确认,看能否在late_resume调用过程中减少延时。尤其是影响较大的BEKEN_FM模块400ms,lcd_hx8362_rgb_spi 模块264ms电容屏模块158msmmc累计也达150ms




    展开全文
  • 在centos启动官方tomcat时,启动过程很慢,需要几分钟,经过查看日志,发现耗时在这里:是session引起随机数问题导致: 14-Jul-2016 04:14:22.900 INFO [localhost-startStop-1] org.apache.catalina.util....

    1. CentOS7 Tomcat 启动过程很慢

    在centos启动官方的tomcat时,启动过程很慢,需要几分钟,经过查看日志,发现耗时在这里:是session引起的随机数问题导致的:

    14-Jul-2016 04:14:22.900 INFO [localhost-startStop-1] org.apache.catalina.util.SessionIdGenerator.createSecureRandom Creation of SecureRa
    ndom instance for session ID generation using [SHA1PRNG] took [142,673] milliseconds.

    2. JVM上的随机数与熵池策略

    在apache-tomcat官方文档:如何让tomcat启动更快里面提到了一些启动时的优化项,其中一项是关于随机数生成时,采用的“熵源”(entropy source)的策略。

    他提到tomcat7的session id的生成主要通过java.security.SecureRandom生成随机数来实现,随机数算法使用的是”SHA1PRNG”

    private String secureRandomAlgorithm = "SHA1PRNG";

    在sun/oracle的jdk里,这个算法的提供者在底层依赖到操作系统提供的随机数据,在linux上,与之相关的是/dev/random和/dev/urandom,对于这两个设备块的描述以前也见过讨论随机数的文章,wiki中有比较详细的描述,摘抄过来,先看/dev/random :

    在读取时,/dev/random设备会返回小于熵池噪声总数的随机字节。/dev/random可生成高随机性的公钥或一次性密码本。若熵池空了,对/dev/random的读操作将会被阻塞,直到收集到了足够的环境噪声为止

    而 /dev/urandom 则是一个非阻塞的发生器:

    dev/random的一个副本是/dev/urandom (”unlocked”,非阻塞的随机数发生器),它会重复使用熵池中的数据以产生伪随机数据。这表示对/dev/urandom的读取操作不会产生阻塞,但其输出的熵可能小于/dev/random的。它可以作为生成较低强度密码的伪随机数生成器,不建议用于生成高强度长期密码。 
    另外wiki里也提到了为什么linux内核里的随机数生成器采用SHA1散列算法而非加密算法,是为了避开法律风险(密码出口限制)。

    回到tomcat文档里的建议,采用非阻塞的熵源(entropy source),通过java系统属性来设置:

    -Djava.security.egd=file:/dev/./urandom

    catalina.sh

    if [[ "$JAVA_OPTS" != *-Djava.security.egd=* ]]; then
        JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/./urandom"
    fi

    这个系统属性egd表示熵收集守护进程(entropy gathering daemon),但这里值为何要在dev和random之间加一个点呢?是因为一个jdk的bug,在这个bug的连接里有人反馈及时对 securerandom.source 设置为 /dev/urandom 它也仍然使用的 /dev/random,有人提供了变通的解决方法,其中一个变通的做法是对securerandom.source设置为 /dev/./urandom 才行。也有人评论说这个不是bug,是有意为之。

    我看了一下我当前所用的jdk7的java.security文件里,配置里仍使用的是/dev/urandom:

    # Select the source of seed data for SecureRandom. By default an 
    # attempt is made to use the entropy gathering device specified by 
    # the securerandom.source property. If an exception occurs when 
    # accessing the URL then the traditional system/thread activity 
    # algorithm is used. 

    # On Solaris and Linux systems, if file:/dev/urandom is specified and it 
    # exists, a special SecureRandom implementation is activated by default. 
    # This “NativePRNG” reads random bytes directly from /dev/urandom. 

    # On Windows systems, the URLs file:/dev/random and file:/dev/urandom 
    # enables use of the Microsoft CryptoAPI seed functionality. 

    securerandom.source=file:/dev/urandom

    我不确定jdk7里,这个 /dev/urandom 也同那个bug报告里所说的等同于 /dev/random;要使用非阻塞的熵池,这里还是要修改为/dev/./urandom 呢,还是jdk7已经修复了这个问题,就是同注释里的意思,只好验证一下。

    使用bug报告里给出的代码:

    import java.security.SecureRandom;
    class JRand {
        public static void main(String args[]) throws Exception {
            System.out.println("Ok: " +
                SecureRandom.getInstance("SHA1PRNG").nextLong());
        }
    }

    然后设置不同的系统属性来验证,先是在我的mac上:

    % time java -Djava.security.egd=file:/dev/urandom  JRand
    Ok: 8609191756834777000
    java -Djava.security.egd=file:/dev/urandom JRand  
    0.11s user 
    0.03s system 
    115% cpu 
    0.117 total
    
    % time java -Djava.security.egd=file:/dev/./urandom  JRand
    Ok: -3573266464480299009
    java -Djava.security.egd=file:/dev/./urandom JRand  
    0.11s user 
    0.03s system 
    116% cpu 
    0.116 total

    可以看到/dev/urandom和 /dev/./urandom 的执行时间差不多,有点纳闷,再仔细看一下wiki里说的:

    FreeBSD操作系统实现了256位的Yarrow算法变体,以提供伪随机数流。与Linux的/dev/random不同,FreeBSD的/dev/random不会产生阻塞,与Linux的/dev/urandom相似,提供了密码学安全的伪随机数发生器,而不是基于熵池。而FreeBSD的/dev/urandom则只是简单的链接到了/dev/random。 
    尽管在我的mac上/dev/urandom并不是/dev/random的链接,但mac与bsd内核应该是相近的,/dev/random也是非阻塞的,/dev/urandom是用来兼容linux系统的,这两个随机数生成器的行为是一致的。参考这里

    然后再到一台ubuntu系统上测试:

    % time java -Djava.security.egd=file:/dev/urandom JRand 
    Ok: 6677107889555365492 
    java -Djava.security.egd=file:/dev/urandom JRand 
    0.14s user 0.02s system 9% cpu 1.661 total

    % time java -Djava.security.egd=file:/dev/./urandom JRand 
    Ok: 5008413661952823775 
    java -Djava.security.egd=file:/dev/./urandom JRand 
    0.12s user 0.02s system 99% cpu 0.145 total 
    这回差异就完全体现出来了,阻塞模式的熵池耗时用了1.6秒,而非阻塞模式则只用了0.14秒,差了一个数量级,当然代价是转换为对cpu的开销了。

    // 补充,连续在ubuntu上测试几次/dev/random方式之后,导致熵池被用空,被阻塞了60秒左右。应用服务器端要避免这种方式。

    本条目发布于2014-06-25。属于java、programming分类,被贴了 freebsd、java、linux、mac、os、random、tomcat 标签。

    原文: http://hongjiang.info/jvm-random-and-entropy-source/

    展开全文
  • 出现下载jar包很慢或者失败主要原因是下载url地址是外网地址,网络速度受限,可以尝试修改下载url地址来处理这类问题。 1、打开maven配置文件(我这里是自定义文件地址路径F:\maven\apache-maven-3.3.9\...
  • 最近在阿里云服务器使用Docker启动Tomcat,发现tomcat服务器启动过程很慢。但是在本地启动很快,一直找不到问题所在,查看Tomcat服务器启动日志发现打印出这么一段日志:二月 12, 2018 9:20:02 上午 org.apache....
  • 记录工作中遇到问题,分享出来...点击库存或者点击销售,查询数据很慢,有将近几十秒,查询数据用是存储过程,在数据库中执行存储过程,查询数据是很快,速度非常理想,1秒不到,但是c#程序中调用就要很久。...
  • 之前遇到过一个奇怪问题,这个大多数会在阿里云服务器上出现;就是tomcat启动超级 最后发现是session引起随机数导致; 解决方案;在tomcat/bin/catalina.sh加 JAVA_OPTS="-Djava.security.egd=...
  • 本人最近要写一个restfulAPI,需要token认证,网上...代码写好了,测试发现生成过程很缓慢,长达1580ms,这个也太了吧。没有人觉得性能有问题吗?为什么还有那么多人推荐使用?大家做API都是使用哪种token呢? ...
  • ssh 连接过程很慢

    2010-10-19 22:11:00
    是DNS反向解析造成/etc/resolv.conf
  • 执行同样存储过程,调用同样参数 在VS 中调用存储过程和传参后,到数据加载需要20秒或更多, 在SQL直接调用则不到一秒,同一个存储过程为什么有这么大区别呢? 原因:存储过程计划失效原因 产生原因:...
  • 网上看到解决办法: 项目--》配置属性--》C/C++--》代码生成--》启用最小重新生成:Yes(/GM);...自己发现问题: 我问题是在开发过程中,直接复制了其他cpp文件,然后修改名字后最为新cpp文件...
  • 但是这个并不是在所有app以及多页面上出现。 日志信息 从上述日志可以看出来,通过xpath查找需要大概10s时间,而点击操作需要时间就更多了大概花了21s时间。 一旦这个页面元素非常多情况,...
  • 存储过程执行慢的原因

    千次阅读 2019-05-16 11:17:00
    存储过程执行很慢,单独拎出来执行就很快1.一开始是直接写存储过程,然后执行,卡了很久,大概10分钟左右才执行出来2.后面我尝试将插入数据插入到临时表中,大概5秒就执行出来了3.但我发现,执行出来结果跟我...
  • select p.surplus_capital from clspuser.crf_p2p_rpt_bill_pen_new p ,salaryuser.crf_salary_pi_account a where p.loan_contract_no = a.loan_contract_no ...查看该语句执行计划如下: SQL> selec
  • 问题描述: 开始时侯采用是32位JDK,但是部署应用时侯总是out ...没有使用native lib无法使用native io,服务刚启动时侯速度还可以接受,到第二天就变得非常。从bea工程那获得了64位 native lib但是还是用无
  • Office 2013 Excel 打开文档很慢很慢的解决方法

    万次阅读 热门讨论 2014-09-22 19:07:53
    这几天打开excel文档很慢很慢,双击之后好久没反应,过会儿它才慢慢冒出来,当时将就了,刚刚休息的时候想着查一下吧,不然很影响工作效率!!!  查的过程中发现有人说在开始菜单打开就很快,唯独双击慢,试验了...
  • 做项目过程中遇到了一些查询很慢的SQL语句,本次记录一下处理问题的过程及方法 如何定位到返回数据慢的问题? 1、使用谷歌浏览器查看接口请求时间的组成 查看Watting(TTFB)的时间,如果时间过程则是定位到后端服务...
  • 编译存储过程的时候,執行很慢﹐好像hang住一樣 1.可能被锁住 查看v$lockedselect b.sid,b.serial#,b.machine,b.terminal,b.program,b.process,b.sta...
  • 写了一个存储过程,用游标返回结果集,在plsql里面单独执行调用很快,为什么java调用该存储过程很慢
  • 现象描述:关于oracle Dblink 查询的效率慢的问题,起初直接使用select * from tab@dblink 查询效率很快,由于想通过定时任务执行,因此写了存储过程 insert into tab select * from tab@dblink where inftime>b...
  • oracle 存储过程中执行 update 很慢

    千次阅读 2017-11-09 16:04:32
    如题,造成这个现象可能原因 是表被锁了 执行下列sql语句 select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.object_name, lo.locked_mode from v$locked_object lo, dba_objects ao, v$...
  • 慢过程多任务

    2020-11-20 20:24:46
    可能类似于流水线,但同时强调慢过程,一点点打磨,这反而是一件非常高效事情。 优势与不足 首先,关注不同领域,可以让你在一件事遇到困难时,切换到另外一个工作状态,从而持续兴奋去工作。比如说马斯克,...
  • 对于查询不是频繁存储过程,可使用 OPTION (OPTIMIZE FOR UNKNOWN)解决参数嗅探问题,那么 OPTION (OPTIMIZE FOR UNKNOWN)又是何物呢,官方解释是: OPTIMIZE FOR 编译和优化查询时提示查询优化器对本地...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,297
精华内容 3,318
关键字:

很慢的过程