0%

现网有服务量大的服务,一次OOM后只留下了javacore文件,heapdump没有生成,这次去另一台一样职责的机器上检查取一下javacore和heap dump文件。

阅读全文 »

Cookie的domain和path

domain

1
Set-Cookie: login_sip=1D-8B-35; Path=/; Domain=.example.com

SSO单点登录后,返回的头信息中应该包括若干条Set-Cookie,上述的Cookie说明此key-value的Cookie能用于*.example.com所有二级域名,Path=/表示后续所有路径都可以使用。
下面说的所有二级域名当然包括一级域名。

  • Path=/; Domain=.example.com 所有二级域名,所有uri
  • Path=/; Domain=account.example.com 仅account.example.com这个二级域名可用,所有uri
  • Path=/openapi; Domain=.example.com 所有二级域名,仅匹配/openapi的uri

坑重现

JMeter的Server Name or IP中,域名或ip后不应该添加任何东西,perf.example.com192.168.1.1都是对的,以下都是错误的例子。

  • perf.example.com/
  • perf.example.com/zoo
  • 192.168.1.1:8080
    如果填写的是perf.example.com/,就会出现错误信息:Not storing invalid cookie: <aasso_login=””; Path=/; Domain=.example.com> for URL http://perf.example.com//zoo/services/N (Illegal ‘domain’ attribute “example.com”. Domain of origin: “perf.example.com/“)

前端内存泄漏 - 威力加强版

背景

前端应用越来越复杂,反复操作可能导致dom或js对象没有被正确回收,导致内存占用持续高位。

测试原理

  • Selenium 控制浏览器反复操作
  • psutil 获取操作系统层面的内存占用
  • window.performance.memory 获取浏览器V8引擎级别js堆内存使用情况(chrome only)
  • openpyxl 记录到excel
  • robotframework 包装降低学习成本
graph LR
    A[Robot framework/Selenium] --pid--> B[pstutil]
    A --获取pid--> C[chromedriver]
    A --执行js获取内存占用-->C
    B --获取所有子进程chrome的pid--> A
    B --chrome进程的内存占用--> A
graph TD
    A[Selenium: 获取chromedriver进程号] --> B[psutil: 获取多个子进程chrome的进程号]
    B --> C[psutil: 获取子进程的内存占用]
    C --> D[chrome: 执行js获取js使用情况]

工程目录介绍

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
├─1-TestCase
│ 切换.txt

├─2-DOMElement
│ commonVariable.txt
│ HomePage.txt

├─3-Keywords
│ CanvasAW.txt
│ Common.txt
│ CommonAction.txt
│ CommonAssert.txt
│ CommonDriver.txt
│ CommonResolve.txt
│ CommonWait.txt
│ HomePage.txt
│ MemLeak.txt
│ UplSolo.txt

├─5-Extendlibrary
│ │
│ └─MemoryLeak
│ MemoryUtils.py
│ MemUsageExcel.py
graph LR
    切换.txt --> MemLeak.txt
    切换.txt --> UplSolo.txt
    MemLeak.txt --> MemUsageExcel.py
    MemUsageExcel.py --> MemoryUtils.py
  • UplSolo.txt:封装页面上的业务操作
  • MemLeak.txt:封装跟内存泄漏有关的动作,MemUsageExcel.py 所有的方法在此划分
  • MemUsageExcel.py:记录excel,调用MemoryUtils.py

曲折经历

进程号变化导致写excel数据不对齐

记录一开始的chrome进程,后续新增的进程不管,死掉的进程默认为0

精确内存需要在打开chrome时候新增参数

探讨

该方法是否真的能识别出内存泄漏?

  1. 系统进程级别比js占用多很多
  2. 系统进程级别的内存可能随应用当前页面展示的内容不同而(自动地)有所回落
  3. 更进一步的分析就需要对数据进行分析了,后话了

项目地址

https://github.com/Tony36051/js-mem-leak-test/

关键字默认参数是变量,也需要定义

1
2
登录
[Arguments] ${url}=${Url_A3} ${userName}=${User_A3} ${passWord}=${Password_A3}

如果这里的${Url_A3}没有定义,会报错Non-existing variable '${Url_A3}'.

打开chromedriver时候,增加(命令行)参数

1
2
3
4
${args_list}	Create List	user-data-dir=${OUTPUT DIR}${/}chrome_data	enable-precise-memory-info
${chromeOptions} Create Dictionary args ${args_list}
${cap_dict} Create Dictionary chromeOptions ${chromeOptions}
Open Browser ${url} chrome desired_capabilities=${cap_dict}

日常工作之一就是帮助合作方解决自动化问题, 今天的问题是python写的Robotframework扩展库ExcelRobot在读取xlsx报错, 同样的文件昨天还是OK的. 带着疑惑开始debug

阅读全文 »