预检清单
- 我已阅读了此项目的Contributing Guidelines文档。
- 我同意遵循此项目遵循的Code of Conduct规则。
- 我在问题跟踪器中搜索了一个与我想报告的问题匹配的问题,但没有成功。
(注意:我看到有一个关于memlog的问题已经关闭,尽管如此,我还是提交了一个bug报告,因为通过electron附加memlog开关的行为似乎与Chrome的行为不符)
问题详情
- Electron版本:
- v9.0.5
- 操作系统:
- Arch Linux(滚动发布)
预期行为
当使用Chrome作为详细说明的以下代码附加memlog标志时:
chromium --memlog=all
并使用MemoryInfra选择捕获跟踪信息,可以获得额外的堆信息。
实际行为
当从electron应用程序附加Chrome memlog标志时,不会获得额外的堆信息。
重现方法
使用以下最小代码示例:
const {app, BrowserWindow, contentTracing} = require('electron')
const path = require('path')
app.commandLine.appendSwitch("memlog","all")
app.commandLine.appendSwitch("memlog-keep-small-allocations")
app.commandLine.appendSwitch("memlog-sampling-rate",100000)
app.commandLine.appendSwitch('memlog-stack-mode', 'native');
function createWindow () {
const mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
preload: path.join(__dirname, 'preload.js')
}
})
mainWindow.loadFile('index.html')
}
app.on('ready', async () => {
await contentTracing.startRecording({
trace_buffer_size_in_kb: 1024*300,
included_categories: ['disabled-by-default-memory-infra'],
excluded_categories: ['*'],
"memory_dump_config": {
"triggers": [
{ "mode": "light", "periodic_interval_ms": 50 },
{ "mode": "detailed", "periodic_interval_ms": 1000 }
]
}
})
console.log('Tracing started')
await new Promise(resolve => setTimeout(resolve, 60000))
const path = await contentTracing.stopRecording()
console.log('Tracing data recorded to ' + path)
})
app.whenReady().then(async () => {
createWindow()
app.on('activate', function () {
// On macOS it's common to re-create a window in the app when the
// dock icon is clicked and there are no other windows open.
if (BrowserWindow.getAllWindows().length === 0) createWindow()
})
})
app.on('window-all-closed', function () {
if (process.platform !== 'darwin') app.quit()
})
此代码尝试设置Chrome memlog开关并记录跟踪信息,然后我使用chrome://tracing工具加载它。
截图
以下截图显示了使用--memlog=all的效果,当仅从Chromium(而非electron)进行跟踪时,您可以看到“堆详情”部分:
以下截图显示了我使用上述代码从electron获取的跟踪信息,如您所见,没有堆详情部分:
6条答案
按热度按时间ki0zmccv1#
我认为这对于内存分析很重要,因为我的应用程序使用了很多malloc/unspecified...
9njqaruj2#
面包屑:问题描述中提到的 closed question。
rggaifut3#
当标志附加在命令行上而不是通过JS时,这个工作是否正确?
o4hqfura4#
在#27627处,nornagon处理了switch支持,该支持来自堆分析服务。
wsewodh25#
@deepak1556 为什么PR没有被合并?需要帮助来支持这个吗?
nom7f22z6#
我们已经在跟踪UI中看到了一些与此类别相关的崩溃,现在情况可能已经发生了变化。如果你对此感兴趣,可以随时查看。