• [技术干货] 华为IVS1800日志收集与查询(web portal)
    1. 文档说明    本文档描述如何通过IVS1800的web portal手机IVS1800的日志。2. 操作指引    2.1 登录IVS1800 web portal 页面,点击导航栏中的“故障收集”标签。    2.2 在“故障收集”页面左侧,可以选择需要收集的日志模块    2.3 在页面右侧,选择收集日志的起止时间    注:日志包括当前日志和备份日志。时间范围仅对备份日志生效。当前日志一定会收集,只收集当前日志可不设置时间范围。    2.4 选择完成后,点击“开始收集”即可
  • [技术干货] web场景- Memcached调优
    1.1 Memcached简介Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一款高性能的分布式内存缓存服务器,通常的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。官方链接:https://memcached.org/1.2 Memcached物理机调优方法1.2.1 Memcached亲和性设置目的:设置memcached服务的亲和性,使用numactl设置CPU与内存的亲和性。提升服务器性能方法:步骤 1 安装numactl            yum -y install numactl步骤 2 编辑/usr/lib/systemd/system/memcached.service            添加如下内容ExecStart=/usr/bin/numactl --cpunodebind=0,1 --membind=0,1 /opt/memcached/bin/memcached -t 48 -p 11211 -u root -m 122880 -c 100000命令参数说明参数名称参数说明cpunodebind=nodes进程绑定CPU,其中0,1表示绑定node0和node1的core--membind=nodes分配进程的内存,其中0,1表示分配的内存在node0和node1上-t <num>使用的线程数(48表示使用48个线程)-p <num>监听的TCP端口-u <username>设定进程所属用户。(只有root用户可以使用这个参数)-m <num>分配给memcached实例的内存大小,以MB为单位-c <num>最大并发连接数 1.3 Memcached虚拟机调优方法目的:修改kvm虚拟机配置文件:配置虚拟机的CPU、内存、网卡。方法:步骤 1  编辑虚拟机配置文件。             以虚拟机vm1为例,执行如下语句编辑虚拟机配置文件:            virsh edit vm1                    该命令为打开vm1的配置文件,后续步骤2-5均在此基础上完成,修改完成后执行 :wq 保存即可,配置文件需重启虚拟机生效,执行如下命令重启   虚拟机:     virsh shutdown vm1      virsh start vm1步骤 2 设置vcpu与物理cpu绑定。            设置vcpu与物理cpu绑定的脚本如下所示:      <vcpu placement='static' cpuset='0-3'>4</vcpu>      <cputune>      <vcpupin vcpu='0' cpuset='0'/>      <vcpupin vcpu='1' cpuset='1'/>      <vcpupin vcpu='2' cpuset='2'/>      <vcpupin vcpu='3' cpuset='3'/>      <emulatorpin cpuset='0-3'/></cputune>参数说明vcpu虚拟核cpuset物理核步骤 3 设置numa绑定。            设置numa绑定的脚本如下所示:        <numatune>        <memnode cellid='0' mode='strict' nodeset='0'/>        </numatune>        <cpu mode='host-passthrough' check='none'>        <topology sockets='1' cores='4' threads='1'/>        <numa>        <cell id='0' cpus='0-3' memory='12582912' unit='KiB'/>        </numa> </cpu> 参数说明nodeset物理机numa nodecellid虚拟机 numa node步骤 4 设置PCIe网卡直通。            设置PCIe网卡直通的脚本如下所示:      <hostdev mode='subsystem' type='pci' managed='yes'>      <source>      <address domain='0x0000' bus='0x82' slot='0x00' function='0x0'/>      </source></hostdev>其中"domain"、"bus"、"slot"和"function"是对应物理网卡的信息,可以执行lspci或者ethtool -i 网卡名 命令查看。              执行lspci,输出如下结果,只需关注最左侧的数字:        “82:00.0 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family (4*25GE) (rev 45)”        其中,网卡的bus-info是16进制数,由上述输出结果最开头的数字82:00.0可以看出,bus为0x82,slot为0x00,function为0x0,domain为0x0000。步骤 5 设置静态大页。宿主机配置静态大页。在kernel启动时的cmdline添加配置参数,即在/boot目录下的grub.cfg 文件添加如下设置:transparent_hugepage=never default_hugepagesz=1G hugepagesz=1G hugepages=200                配置1G的hugepage,需要当前宿主机页表大小为4K。 2.设置内存大页配置。        设置内存大页的脚本如下所示:    <memoryBacking>    <hugepages>    <page size=’ 1048576’ unit=’KiB’ nodeset=’0’/>    </hugepages></memoryBacking>
  • [技术干货] web场景-Varnish调优
    1.1 Varnish简介Varnish是一款高性能的反向代理缓存服务器,通过缓存静态资源,在基于Web的业务场景可提升站点10+倍的性能,目前仍是CDN(Content Delivery Network)的一个重要实现方案。1.2 Varnish物理机调优1.2.1 Varnish配置参数调优目的:通过调优Varnish的配置文件,可以有效的提高服务器的性能。方法:配置varnish的配置文件/usr/local/varnish/config/default.vcl中的default,vcl_recv,vcl_backend_response,vcl_pipe,vcl_pass,vcl_hash,vcl_hit,vcl_miss,vcl_deliver模块。配置项说明default配置通信IP及端口vcl_recv用于接收和处理请求;当请求到达varnish,通过判断请求的数据来决定如何处理请求vcl_backend_response获得后端主机的响应后调用vcl_pipe用于将请求直接传递至后端主机,并将后端响应原封不动返回给客户端vcl_pass用于将请求直接传递给后端主机,但后端主机的响应并不缓存,而是直接返回给客户端vcl_hash在vcl_recv调用后为请求创建一个hash值时,调用。此hash值将作为varnish中hash表的keyvcl_hit在缓存中找到请求的内容后自动调用vcl_miss在缓存中没有找到请求的内容后自动调用。用于判断是否需要从后端服务器获取内容vcl_deliver将在缓存中找到的请求的内容发送给客户端前调用1.2.2 Varnish亲和性配置目的:对varnish进程进行绑核并启动。方法:以物理机1P场景为例,使用numactl设置CPU与内存的亲和性。numactl -C 0-2,4-10,12-18,20-26,28-34,36-42,44-47 --membind=0,1 /usr/local/varnish/sbin/varnishd -P /tmp/varnish.pid -a :12345 -T 127.0.0.1:6082 -s malloc,100GB -f /usr/local/varnish/config/default.vcl -t 600 -p thread_pool_max=5000 -p thread_pools=10 -p thread_pool_destroy_delay=3 -p timeout_idle=75 -p thread_pool_min=700参数名称参数说明-C进程绑定的CPU core--membind分配进程的内存,其中0,1表示分配的内存在node0和node1上-PVarnish进程pid文件存放路径-a表示Varnish对httpd的监听地址及端口-T设定 varnish 的 telnet 管理地址及其端口-s指定 varnish 缓存存放的方式,常用的方式有:“-s file,<dir_or_file>,<size>”。-f指定 varnish 的配置文件位置-t指定默认的TTL值-p thread_pool_max每个线程池创建的最大线程数-p thread_pools设置线程池个数-p thread_pool_destroy_delay摧毁线程的延迟时间,也就是摧毁之前需要犹豫一下,这个犹豫的时间-p timeout_idle设置保持链接的空闲时长-p thread_pool_min每个线程池创建的最小线程数 
  • [技术干货] web场景-squid调优
    1.1 Squid简介Squid是一个高性能的代理缓存服务器,通过缓存和重用经常请求的网页,减少了带宽并缩短了响应时间。1.2 Squid物理机调优1.2.1 Squid亲和性调优目的:通过调优Squid的配置文件,可以有效的提高服务器的性能。方法:对squid进程进行绑核并启动。在/usr/local/squid/etc/squid.conf中配置cpu_affinity_map参数:workers 43cpu_affinity_mapprocess_numbers=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38, 39,40,41,42,43,44,45,46,47,48cores=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, 38,39,40,41,42,43,44,45,46,47,48Squid启动参数说明参数说明Workers启动的进程数cpu_affinity_map process_numbers进程与CPU的对应关系,如上配置,表示squid的启动的1-48个进程分别对应着1-48号CPU步骤2   一路CPU上启动一个Squid实例。             /usr/local/squid/sbin/squid -s                如需启动两个Squid实例,需新建配置文件squid_2.conf,执行如下命令启动第二个实例:        /usr/local/squid/sbin/squid -f /usr/local/squid/etc/squid_2.conf
  • [技术干货] web场景-Tomcat调优
    1.1 Tomcat简介Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。1.2 物理机调优方法1.2.1 Tomcat参数调优目的:通过修改tomcat的配置文件,可以有效提高tomcat性能方法:按照如下所示信息,配置/home/apache-tomcat-9.0.20/conf/server.xml的各个参数。<Connector  executor="tomcatThreadPool"    port="10000" protocol="HTTP/1.1"    acceptCount="10000"    maxConnections="10000"    connectionTimeout="20000"    compression="off"    compressionMinSize="2048"    URIEncoding="utf-8"    tcpNoDelay="true"    enableLookups="false"    useURIValidationHack="false"    disableUploadTimeout="false"    connectionUploadTimeout="150000"    keepAliveTimeout="12000"    maxKeepAliveRequests="1000"redirectPort="8443" /> 1.2.2 Tomcat 亲和性设置Tomcat支持cpu绑核,利用cpu亲和性设置,可以使用taskset或numctl工具进行绑核操作方法:taskset -c N ./startup.sh或numactl -C N ./startup.shN表示要指定核的序号,例如 将tomcat进程绑定到0-3core上:taskset -c 0-3  ./startup.sh1.2.3 容器场景调优方法容器与物理机共享网口,在物理机上执行绑核脚本。以4core的http短连接场景的绑核脚本为例,脚本内容如下,如果要修改绑核脚本,只需修改要绑定的网口名eth1,以及要绑定的core,然后在关闭irqbalance.service的情况下使用脚本即可:#!/bin/bashcnt=2eth1=enp3s0ethtool -L $eth1 combined $cntirq1=`cat /proc/interrupts| grep -E ${eth1} | head -1 | awk -F ':' '{print $1}'`irq1=`echo $irq1`i=0while(( $i < 1))do    for cpunum in 2 3    do        echo $cpunum "->" $irq1        echo  $cpunum > /proc/irq/$irq1/smp_affinity_list        let "irq1++"    done   let "i++"done脚本中参数及命令说明参数及命令名称参数及命令解释cnt 网口队列数eth1使用的网口名irq1网口eth1对应的中断号cpunum分配给网口eth1用于处理网卡中断的核ethtool -L $eth1 combined $cnt设置网口队列长度为核数cat /proc/interrupts | grep $eth1 | awk -F ':' '{print $1}'查询网口中断数echo $cpunum > /proc/irq/$irq/smp_affinity_list根据中断号,将每个中断各绑定在一个核上此脚本只是容器场景下网卡调优方法1.3 虚拟机调优方法虚拟机采用网卡直通的模式,每个虚拟机配置一个虚拟网口,在虚拟机内部执行绑核脚本。以4core的http短连接场景的绑核脚本为例,脚本内容如下,若要修改绑核脚本,只需修改要绑定的网口eth1,以及要绑定的core,在关闭irqbalance.service的情况下使用脚本即可。#!/bin/bashcnt=2eth1=enp5s0ethtool -L $eth1 combined $cntirq1=`cat /proc/interrupts| grep -E ${eth1} | head -1 | awk -F ':' '{print $1}'`irq1=`echo $irq1`i=0while(( $i < 2))do    for cpunum in  3    do        echo $cpunum "->" $irq1        echo  $cpunum > /proc/irq/$irq1/smp_affinity_list        let "irq1++"    done  let "i++"done脚本中参数名称及解释参数名称参数解释cnt网口队列数eth1实际使用的网口名irq1网口eth1对应的中断号cpunum分配给网口eth1用于处理网卡中断的核此脚本只是虚拟机场景下的网卡调优,虚拟机场景下的亲和性设置与物理机一致.
  • [技术干货] web场景调优
    1.1 Web场景简介常见Web server中使用的部件,以及各部件的功能。下图是一典型的web解决方案的物理和逻辑架构。如上图所示,一般的web解决方案由如下几部分构成:Web前端主要功能为负载均衡和数据转发,主要涉及的部件为Nginx和Haproxy等。中间一层为提供数据服务的应用服务器,包含web server,业务逻辑和内存加速几部分,常用的webserver组件一般有:Apache,tomcat,nginx等组件,业务逻辑则为客户基于php/java/HHVM开发的web应用组件,内存加速模块为提升web性能,加快内存访问而使用的组件,主要有memcached,redis等组件。数据库为web提供大容量,高可靠,高性能的存储.1.2  web调优原则在性能优化时,我们必须遵循一定的原则,否则,有可能得不到正确的调优结果。主要有以下几个方面: 对性能进行分析时,要多方面分析系统的资源瓶颈所在,因为系统某一方面性能低,也许并不是它自己造成的,而是其他方面造成的。如CPU利用率是100%时,很可能是内存容量太小,因为CPU忙于处理内存调度。 一次只对影响性能的某方面的一个参数进行调整,多个参数同时调整的话,很难界定性能的影响是由哪个参数造成的。由于在进行系统性能分析时,性能分析工具本身会占用一定的系统资源,如CPU资源、内存资源等等。我们必须注意到这点,即分析工具本身运行可能会导致系统某方面的资源瓶颈情况更加严重。调优分析思路如下:对于服务端的问题,需要重点定位的硬件指标包括CPU、内存、硬盘、BIOS配置,其中CPU是需要重点关注的:服务端虚拟机CPU未压满或存在明显热点函数直接影响最终测试结果,需要注意的是虚拟机的CPU是否压满是在虚拟机内部查看,不是在host主机上查看;需要重点关注的软件指标包括应用软件、OS层的优化,该部分的调优对于性能的提升是很可观的。对于网络问题,需要重点定位的包括网络带宽和网络中断,处理网络中断的核是否压满是需要重点关注的,http长连接场景需要重点关注网络带宽是否达到瓶颈。对于客户端问题:客户端的性能是否满足测试需要,尤其对于http短连接场景。1.3 Web场景基础优化方法Web场景下有一些基础调优手段,是几个部件都要使用到的,主要是BIOS侧的参数,内核tcp的参数和网卡参数调优等几个方面1.3.1 BIOS参数调优:关闭SMMU和关闭cpu预取目的对于不同的硬件设备,通过在BIOS中设置一些高级选项,可以有效提升服务器性能。服务器上的SMMU一般用来完成设备的地址转换,并且可以实现设备隔离,在虚拟化中很实用,但是在物理机测试场景下,SMMU可能会导致性能下降,尤其对于小包网络场景,因此建议关闭该功能提升服务器性能。在虚拟机场景需要打开此配置来使用PCI直通功能。在本测试场景中,预取会导致cache污染,cache miss增加,因此建议关闭预取功能。修改方式 关闭SMMU:方法一:                        方法一只适用于物理机、负载均衡场景,不适用于Nginx虚拟机场景。    重启服务器,按Esc键进入BIOS设置界面。 依次进入“Advanced > MISC Config >  > Support Smmu”。 将“Support Smmu”设置为“Disabled”,按“F10”保存退出(永久有效)。 方法二:         方法二适用于物理机、负载均衡、虚拟机场景的调优,建议使用方法二。执行vim /etc/grub2-efi.cfg命令。 搜索字段"4.14",在内核代码中加入"iommu.passthrough=1"。 保存退出后,重启服务器。关闭cpu预取: 进入BIOS设置界面。 依次进入“Advanced > MISC Config > CPU Prefetch”。 将“CPU Prefetch”设置为“Disabled”,按“F10”保存退出(永久有效)。         1.3.2 内核参数调优目的   对于不同的操作系统,通过调优内核参数,可以有效的提高服务器的性能。修改方式步骤 1 执行vim /etc/sysctl.conf命令,并输入下列内核参数:net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_keepalive_time = 60net.ipv4.tcp_fin_timeout = 1net.ipv4.tcp_max_tw_buckets = 5000net.ipv4.ip_local_port_range = 1024    65500net.core.somaxconn = 65535net.ipv4.tcp_max_syn_backlog = 262144net.core.netdev_max_backlog = 262144net.core.rmem_max = 16777216net.core.wmem_max = 16777216内核参数说明如下表所示:Linux内核参数参数定义当前值默认值net.ipv4.tcp_tw_reuse 1表示允许将TIME-WAIT sockets重新用于新的TCP连接,0表示关闭。10net.ipv4.tcp_keepalive_timeTCP发送keepalive探测消息的间隔时间(秒),用于确认TCP连接是否有效607200net.ipv4.tcp_fin_timeout socket 保持在 FIN_WAIT_2 状态的最大时间160net.ipv4.tcp_max_tw_buckets减少TIME_WAIT连接数,避免过多TIME_WAIT连接占用网络资源导致新建连接资源紧张,时延增加5000262144net.ipv4.ip_local_port_range增加可用端口范围,避免大量连接占用端口时,新建连接不断寻找可用端口导致的性能跳变1024 655003276861000net.core.somaxconn 定义了系统中每一个端口最大的监听队列的长度,这是个全局的参数65535128net.ipv4.tcp_max_syn_backlog 表示SYN队列的长度,加大队列长度可以容纳更多等待连接的网络连接2621441024net.core.netdev_max_backlog当每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目2621441000net.core.rmem_max系统套接字写最大缓冲区16777216131071net.core.wmem_max系统套接字写最大缓冲区,增加buffer大小,避免大量新建连接导致buffer溢出,出现无法建立连接情况16777216131071net.nf_conntrack_max最大跟踪连接数065536:                                          当使用容器时,由于不能关闭nf_conntrack模块,所以需要在文件/etc/sysctl.conf中增加nf_conntrack相关内核参数设置,防止table记录满产生丢包问题,具体参数如下:            net.netfilter.nf_conntrack_max=0            net.nf_conntrack_max=0                   步骤 2 写入参数后保存配置文件。         步骤 3 执行命令以生效配置:                    /sbin/sysctl –p 1.3.3 关闭nf_conntrack模块目的内核的nf_conntrack模块可以用来实现NAT,但是在没有使用NAT的场景,开启nf_conntrack模块会导致不需要的CPU消耗,甚至可能导致table记录满产生丢包问题,因此可以考虑关闭nf_conntrack模块提升性能。方法:步骤 1 在"/etc/modprobe.d/blacklist.conf"文件中加入如下参数:        install nf_conntrack /bin/false                blacklist nf_conntrack        blacklist nf_conntrack_ipv6        blacklist xt_conntrack        blacklist nf_conntrack_ftp        blacklist xt_state        blacklist iptable_nat        blacklist ipt_REDIRECT        blacklist nf_nat        blacklist nf_conntrack_ipv4         步骤 2 保存文件后,重启服务器使文件生效。1.3.4 网卡参数调优目的:每个CPU对应一个网卡,每个CPU内的中断绑核只绑在属于本CPU的网卡上,按node各自绑核。中断个数在尽量少的情况下满足当前所有业务core在客户端满压下满CPU运作即可。容器在使用主机网络共享和IPVLAN网络两种网络方式下使用同样的绑核脚本,且都是在物理机上执行绑核脚本。方法: 步骤 1 关闭irqbalance。若要对网卡进行绑核操作,需要关闭irqbalance。1.关闭irqbalance服务,重启失效。systemctl stop irqbalance.service2.停止irqbalance服务,永久有效。systemctl disable irqbalance.service3.查看irqbalance服务状态是否已关闭。systemctl status irqbalance.service  步骤 2 网卡中断绑核。网卡中断绑核,绑定的核专门用于处理网卡中断。1.设置队列深度为CPU的核数。ethtool -L $eth1 combined $cnt2.查询中断号。cat /proc/interrupts | grep $eth1 | awk -F ':' '{print $1}' 3.根据中断号,将每个中断各绑定在一个核上。echo $cpunum > /proc/irq/$irq/smp_affinity_list
  • [技术干货] 华为SDC日志收集与查询(web portal)
    1. 文档说明    本文档描述如何使用SDC的web portal收集或查询摄像机的日志2. 操作指引    登录SDC的web portal后,点击左侧“扳手”图标(维护),在弹出的选项卡中选择“日志”。    2.1 打开日志开关    在页面中开启“调试日志开关”功能,并选择日志模块,点击“确定”。    2.2 日志收集    点击“一键搜集”。    点击后,下载日志文件。    2.3 日志查询    选择“日志类型”,并选择日志的“起止时间”,点击“查询”,即可在页面中查看所选时间段相应类型的日志信息。
  • [技术干货] 如何在华为云部署web网站
    一、注册账号       现在云计算发展越来越迅速,很多资源都可以在云上实现,购买自己想要的服务就可以在云上拥有自己的小天地,特别适合小型企业,不用花大价钱一次性购买物理机,云平台上的弹性云服务器按需计费,方便快捷并且成本较低。我个人倾向于华为云的服务器,所以需要注册一个华为云的账号。登录官网注册成功后,选择弹性云服务器。       弹性云服务器这个功能的性能是我认为最好用的一个,这样就可以快速的搭建起来一个网站,不用在本地搭建服务器,直接将项目部署在云服务器中,方便快捷。在现实中如果你想部署一个Web项目,需要很多钱用来买服务器,好一些的最少都是上万块钱。而云平台上的弹性服务器最主要的是可以按需计费,这样就可以节省成本,可以自己选择想要的功能。二、购买弹性服务器       注册完成后,你还可以选择个人认证或者是企业认证,学生认证(学生认证相对价格有优惠)。根据自身情况选择配置,这里我选择西南-贵阳一区域。       因为我想要在购买的服务器上搭建一个WEB网站,所以这里需要配置安全组规则,要保证基于TCP的80端口、22端口是开放的,这里默认的80,22端口是已经开放的,就不需要重新添加。       接下来购买一个公网IP地址,因为区域原因,我这里只能购买静态BGP。       高级配置里定义云服务器的名称和配置密码等,最后立即购买。如此就购买成功了,弹性服务器里就有自己购买那台服务器了。       之后我们就可以使用Xshell和Xftp软件对我们这台服务器进行远程登陆和操作了。       关于Xshell使用:https://www.jianshu.com/p/4716cc35750f三、搭建web服务器       使用XShell远程登陆服务器,进行管理,输入刚刚我们购买的公网IP地址(可以在弹性服务器那里看见)       输入用户名:root       输入之前购买服务器时自己设置的密码,这样我们就成功登录我们自己的服务器中了       配置并启动apache服务器,这里不过多赘述       使用xftp软件进行文件传输       连接成功后,打开var文件找到www文件再打开,进入www文件下的html文件下       将准备好的网站文件传输进/var/www/html文件中,这里可以上传自己的网站文件四、打开浏览器验证       打开浏览器输入服务器的公网IP,即可看到自己的网站部署成功最后总结       通过这次的华为云平台搭建WEB服务器实验,让我知道了怎么在云平台上部署自己的网站,如何使用Xshell软件去远程登陆到服务器进行管理,再搭配着XFTP软件去传输文件到服务器上,实际操作起来还是比较简单,同时使用云平台搭建的服务器方便快捷,按需计费,大大的节省了成本。同时我将自己的网站代码上传到了附件中,欢迎大家提出意见。
  • [问题求助] 告警上报demo,集成到自己的算法里面,能打印出告警日志,但是web端不显示告警服务页面
    告警日志可正常输出,但是不显示告警服务页面,集成的demo代码到自定义的算法里告警日志 ZHYMechanism为alarmsource的appname 。mechanical为myalarm的nameAlarm|2021/11/23 15:44:20:663| NOTICE:Alarm type:mechanical happen from ZHYMechanismAlarm|2021/11/23 15:44:20:665| NOTICE:Alarm type:mechanical move from ZHYMechanism后台算法日志中:{"log":" [1285486185] [registerGateway]:139 SDC_GATEWAY_SERVER fd is 10, Bad file descriptor\n","stream":"stderr","time":"2021-11-23T11:47:05.963288{"log":"\r\n","stream":"stderr","time":"2021-11-23T11:47:05.963310539Z"}{"log":" [1285486186] [registerGateway]:140 error num:9\n","stream":"stderr","time":"2021-11-23T11:47:05.963329164Z"}{"log":"\r\n","stream":"stderr","time":"2021-11-23T11:47:05.963348539Z"}告警上报demohttps://bbs.huaweicloud.com/forum/thread-93190-1-1.html
  • [技术干货] 关于Click(Web,桌面应用程序)控件难以实现某些功能时,可选用image.click控件
    举例:      在Onebox中,如何点击最新上传的文件或文件夹?例如,见图1(最新的为WeAutomate文件夹);图1解决:      先用image.click控件点击右上方的修改日期,将其改为降序,这样最新的(此处为WeAutomate文件夹)就到第一位了,之后用image.click控件点击左上方的包含“全选 文件名”的图片,见图2(属性中设置少许偏移量,见图3,即可点击到WeAutomate文件夹)。图2图3
  • [问题求助] 【IOT Studio】【Web在线开发创建应用功能】没有创建应用按键
    【功能模块】IOT Studio Web在线开发【操作步骤&问题现象】1、没有创建应用按键【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [热门活动] 昇思MindSpore全新编程语言前端内测开始招募啦!
    昇思MindSpore一个纯纯的大动作来啦!!全新编程语言前端内测开始招募啦!✅如果你对编程语言感兴趣,欢迎你加入我们的行列,提出你的想法与建议,让我们一起见证全新的编程语言面世吧!!奖品:我们为完成挑战任务的小伙伴准备了丰厚的惊喜联名礼品️点击链接进行报名:https://www.wjx.top/vm/eF9Zaww.aspx️扫码海报二维码即可进入交流群,等待审核结果吧!
  • [新手课堂] JavaWeb之会话技术
    会话技术    1. 会话:一次会话中包含多次请求和响应。           一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止    2. 功能:在一次会话的范围内的多次请求间,共享数据    3. 方式:          1. 客户端会话技术:Cookie          2. 服务器端会话技术:SessionCookie:1. 概念:客户端会话技术,将数据保存到客户端2. 快速入门:            1. 创建Cookie对象,绑定数据                 new Cookie(String name, String value)             2. 发送Cookie对象                 response.addCookie(Cookie cookie)             3. 获取Cookie,拿到数据                 Cookie[]  request.getCookies()  3. 实现原理             基于响应头set-cookie和请求头cookie实现4.注意事项:              1.一次可以发送多个cookie。可以创建多个Cookie对象,使用response调用多次addCookie方法发送cookie即可。              2. cookie在浏览器中保存的保存时间。使用setMaxAge(int seconds)方法可以将Cookie数据写到硬盘的文件中,并指定cookie存活时间              3. 默认情况下一个tomcat服务器中,部署了多个web项目,那么在这些web项目中cookie不能共享。如果要共享通过setPath(String path)设置当前虚拟目录:path设置为"/"              4. 不同的tomcat服务器间cookie共享问题?使用setDomain(String path)方法:如果设置一级域名相同,那么多个服务器之间cookie可以共享5. Cookie的特点和作用        1. cookie存储数据在客户端浏览器        2. 浏览器对于单个cookie 的大小有限制(4kb) 以及 对同一个域名下的总cookie数量也有限制(20个)        a. cookie一般用于存出少量的不太敏感的数据        b. 在不登录的情况下,完成服务器对客户端的身份识别代码实现//记录电脑上次打开网页的时间 @WebServlet("/CookieTest")public class CookieTest extends HttpServlet {    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        //设置响应体格式与编码        resp.setContentType("text/html;charset=utf-8");        //获取cookie        Cookie[] cookies = req.getCookies();        boolean flag=false;        //遍历cookie数据        if (cookies!=null && cookies.length>0){            for (Cookie cookie : cookies) {                String name = cookie.getName();                //判断名称中是否有:lastTime                if ("lastTime".equals(name)){                    //设置Cookie的value,下一次使用                    flag=true;                    Date date=new Date();                    SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");                    String str_date = sdf.format(date);                    //tomcat不支持特殊字符,需要通过URL编码                    System.out.println("编码前 "+str_date);                    str_date=URLEncoder.encode(str_date,"utf-8");                    System.out.println("编码后"+str_date);                     //新值串回去,设置存活时间                    cookie.setValue(str_date);                    cookie.setMaxAge(60*60*24);                    resp.addCookie(cookie);                    //有,欢迎光临,上次登录时间                    String value = cookie.getValue();                    //URL 解码                    value=URLDecoder.decode(value,"utf-8");                    resp.getWriter().write("<h1>欢迎回来,您上一次的访问时间是:"+value+"</h1>");                    break;                }            }        }        if (cookies==null || cookies.length==0 || flag==false){            //第一次访问            Date date=new Date();            SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");            String str_date = sdf.format(date);             //tomcat不支持特殊字符,需要通过URL编码            System.out.println("编码前 "+str_date);            str_date=URLEncoder.encode(str_date,"utf-8");            System.out.println("编码后"+str_date);             Cookie cookie=new Cookie("lastTime",str_date);            //新值串回去,设置存活时间            cookie.setValue(str_date);            cookie.setMaxAge(60*60*24);            resp.addCookie(cookie);             resp.getWriter().write("<h1>您好,欢迎您首次访问</h1>");        }     }  }Session:1. 概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。HttpSession2. 快速入门:        1. 获取HttpSession对象:            HttpSession session = request.getSession();        2. 使用HttpSession对象:            Object getAttribute(String name)              void setAttribute(String name, Object value)            void removeAttribute(String name)  3. 原理           Session的实现是依赖于Cookie的。4. 细节:        1. 当客户端关闭后,服务器不关闭,两次获取session是否为同一个?                默认情况下。不是。                如果需要相同,则可以创建Cookie,键为JSESSIONID,设置最大存活时间,让cookie持久化保存。                    Cookie c = new Cookie("JSESSIONID",session.getId());                    c.setMaxAge(60*60);                    response.addCookie(c);        2. 客户端不关闭,服务器关闭后,两次获取的session是同一个吗?            不是同一个,但是要确保数据不丢失。tomcat自动完成以下工作                  session的钝化: 在服务器正常关闭之前,将session对象系列化到硬盘上                  session的活化: 在服务器启动后,将session文件转化为内存中的session对象即可。        3.session什么时候被销毁?            1. 服务器关闭            2. session对象调用invalidate() 。            3. session默认失效时间 30分钟5. session的特点           1. session用于存储一次会话的多次请求的数据,存在服务器端           2. session可以存储任意类型,任意大小的数据代码实现@WebServlet("/SessionDemo1")public class SessionDemo1 extends HttpServlet {    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        //session        HttpSession session = request.getSession();        session.setAttribute("msg","hello session");        //请求转发(这个是在一个URL中)        request.setAttribute("reqmsg","hello req.session");        request.getRequestDispatcher("/SessionDemo3").forward(request,response);      }     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {            this.doPost(request,response);    }}  @WebServlet("/SessionDemo3")public class SessionDemo3 extends HttpServlet {    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {       //获取数据        HttpSession session = request.getSession();        Object msg = session.getAttribute("msg");        System.out.println(msg);        //请求转发        Object reqmsg = request.getAttribute("reqmsg");        System.out.println(reqmsg);    }     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {            this.doPost(request,response);    }}session与Cookie的区别:         1.session存储数据在服务器端,Cookie在客户端         2.session没有数据大小限制,Cookie有         3.session数据安全,Cookie相对于不安全         4.session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。
  • [问题求助] 【DevCloud】【项目构建功能】使用基于springboot的web项目模板构建maven失败
    【功能模块】DevCloud的代码构建【操作步骤&问题现象】1、使用其模板,没有经过任何修改结果不通过。2、【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [问题求助] 前端如何学习?
    首先掌握三大基础HTML,css,javascript.然后学习vue全家桶
总条数:425 到第
上滑加载中