大家好,我刚开发的R shiny 程序部署在新的服务器上,让你大跌眼镜的同样的测试案例,在新、旧服务器上测试结果出现较大的差异,基本配置情况如下:

  1. 服务器相同点
    --Architecture: x86_64
    --CPU op-mode(s): 32-bit, 64-bit
    --Byte Order: Little Endian
    --On-line CPU(s) list: 0-79
    --NUMA node(s): 2
    --Vendor ID: GenuineIntel
    --CPU family: 6
    --BogoMIPS: 4200.00
    --L1d cache: 32K
    --L1i cache: 32K

  2. 服务器差异点(旧服务器-->新服务器)

--CPU(s): 20--> 80
--Thread(s) per core: 1-->2
--Core(s) per socket: 5-->20
--Socket(s): 4--> 2
--Model: 79-->85
--Model name: Intel(R) Xeon(R) CPU E7-4850 v4 @ 2.10GHz-->Intel(R) Xeon(R) Gold 6230 CPU @ 2.10GHz
--Stepping: 1-->7
--CPU MHz: 2099.999 -->1055.383
--Virtualization type: full -->VT-x
--L2 cache: 256K --> 1024K
--L3 cache: 40960K--> 28160K

  1. 主要使用的R包:shiny ,data.table,xgboost,ggplot2等
  2. 部署环境:docker 同一镜像,同一版本程序;
  3. 计算结果:旧服务器3mins,新服务器15mins。

不知道问题出在哪儿,硬件那边同事说没有问题,软件同事说同一环境,差异这么大,主要原因在硬件。

求论坛大佬指点一下,谢谢。

    zizhou

    CPU频率从2GHz降到了1GHz,这可能是一个降速的原因?另外两台服务器上整体的占用情况基本一致吗?会不会旧服务器很空闲,但新服务器其实任务很满,于是分配到你的shiny上的资源就很少?

    另外能否有更具体的数据,可以显示出到底是哪里的计算步骤占用的时间变长了这么多呢?举个极端的例子,不会是新服务器网络不行,于是15min多出来的时间全是在慢慢的下载数据吧。

      fenguoerbian
      两台服务器没有跑任何其他应用,属于空闲状态。和网络也没有关系,这一点也排除了。

      另外,有其他同事考虑是否有基础镜像的原因导致,使用的基础镜像是shinyproxy-templete,但很难说明与它有任何关联。

      fenguoerbian
      另外,你刚才的问题提醒了我,R代码有很多功能,在xgboost计算的时候好像变慢了。这一点也是值得怀疑的地方。

      假设楼主的 Shiny app 只利用了单核做后端计算,首先可以在新旧型号的硬件上用性能瓶颈的核心程序部分做一个 benchmark 确定一下是否因为是单个核心的频率降低和三级缓存减少导致的(最好排除 Docker 部分)。再就是看看系统配置、Docker 配置、Shiny Server 配置是否需要更新。

      当然,也可能是 XGBoost 的一些非典型行为导致的。

        nan.xiao 赞同,可以尝试使用benchmarkme包或microbenchmark包,快速评估新旧服务器的瓶颈。

        library(benchmarkme)
        res <- benchmark_std(runs=3) 
        plot(res)  # 绘制性能排名
        library(microbenchmark)
        # 定义要计算的函数,例如fun1
        microbenchmark(fun1,times=10) #对比两台机器运行所需时间

          nan.xiao
          hello,nan.xiao,我要请你喝酒。
          根据你的提示初步判定是xgboost的参数设置的原因。在源码中我没有设置nthread,导致资源没有合理利用。昨晚我尝试设置nthread=4,效率提升一倍。
          对于这台服务器CPU配置2个插槽,每个插槽有20个核心,每个核心有2个线程,总共有80个线程,具体要设置nthread=?是最佳的,可能还要在测试一下。

          Lvhy
          谢谢,Lvhy,使用你的方法做了测试,很有帮助。