mirror of
https://github.com/wassname/ray.git
synced 2026-06-28 01:46:10 +08:00
[Dashboard] Delete old dashboard (#12144)
* Delete old dashboard from repo. * Delete old dashboard from repo. 2
This commit is contained in:
@@ -1076,46 +1076,6 @@ def start_log_monitor(redis_address,
|
||||
return process_info
|
||||
|
||||
|
||||
def start_reporter(redis_address,
|
||||
port,
|
||||
metrics_export_port,
|
||||
stdout_file=None,
|
||||
stderr_file=None,
|
||||
redis_password=None,
|
||||
fate_share=None):
|
||||
"""Start a reporter process.
|
||||
|
||||
Args:
|
||||
redis_address (str): The address of the Redis instance.
|
||||
port(int): The port to bind the reporter process.
|
||||
metrics_export_port(int): The port at which metrics are exposed to.
|
||||
stdout_file: A file handle opened for writing to redirect stdout to. If
|
||||
no redirection should happen, then this should be None.
|
||||
stderr_file: A file handle opened for writing to redirect stderr to. If
|
||||
no redirection should happen, then this should be None.
|
||||
redis_password (str): The password of the redis server.
|
||||
|
||||
Returns:
|
||||
ProcessInfo for the process that was started.
|
||||
"""
|
||||
reporter_filepath = os.path.join(RAY_PATH, "reporter.py")
|
||||
command = [
|
||||
sys.executable, "-u", reporter_filepath,
|
||||
f"--redis-address={redis_address}", f"--port={port}",
|
||||
f"--metrics-export-port={metrics_export_port}"
|
||||
]
|
||||
if redis_password:
|
||||
command += ["--redis-password", redis_password]
|
||||
|
||||
process_info = start_ray_process(
|
||||
command,
|
||||
ray_constants.PROCESS_TYPE_REPORTER,
|
||||
stdout_file=stdout_file,
|
||||
stderr_file=stderr_file,
|
||||
fate_share=fate_share)
|
||||
return process_info
|
||||
|
||||
|
||||
def start_dashboard(require_dashboard,
|
||||
host,
|
||||
redis_address,
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
# This is a dummy test dependency that causes the above tests to be
|
||||
# re-run if any of these files changes.
|
||||
py_library(
|
||||
name = "dashboard_lib",
|
||||
srcs = glob(["**/*.py"],exclude=["tests/*"]),
|
||||
)
|
||||
|
||||
py_test(
|
||||
name = "test_node_stats",
|
||||
size = "small",
|
||||
srcs = glob(["tests/*.py"]),
|
||||
deps = [":dashboard_lib"]
|
||||
)
|
||||
@@ -1,23 +0,0 @@
|
||||
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
||||
|
||||
# dependencies
|
||||
/node_modules
|
||||
/.pnp
|
||||
.pnp.js
|
||||
|
||||
# testing
|
||||
/coverage
|
||||
|
||||
# production
|
||||
/build
|
||||
|
||||
# misc
|
||||
.DS_Store
|
||||
.env.local
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
@@ -1,65 +0,0 @@
|
||||
This project was bootstrapped with `Create React App
|
||||
<https://github.com/facebook/create-react-app>`__.
|
||||
|
||||
Available Scripts
|
||||
-----------------
|
||||
|
||||
In the project directory, you can run:
|
||||
|
||||
``npm start``
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
Runs the app in the development mode. Open `http://localhost:3000
|
||||
<http://localhost:3000>`__ to view it in the browser.
|
||||
|
||||
The page will reload if you make edits. You will also see any lint errors in the
|
||||
console.
|
||||
|
||||
``npm test``
|
||||
~~~~~~~~~~~~
|
||||
|
||||
Launches the test runner in the interactive watch mode. See the section about
|
||||
`running tests
|
||||
<https://facebook.github.io/create-react-app/docs/running-tests>`__ for more
|
||||
information.
|
||||
|
||||
``npm run build``
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
Builds the app for production to the ``build`` folder. It correctly bundles
|
||||
React in production mode and optimizes the build for the best performance.
|
||||
|
||||
The build is minified and the filenames include the hashes. Your app is ready to
|
||||
be deployed!
|
||||
|
||||
See the section about `deployment
|
||||
<https://facebook.github.io/create-react-app/docs/deployment>`__ for more
|
||||
information.
|
||||
|
||||
``npm run eject``
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
Note: this is a one-way operation. Once you ``eject``, you can’t go back!
|
||||
|
||||
If you aren’t satisfied with the build tool and configuration choices, you can
|
||||
``eject`` at any time. This command will remove the single build dependency from
|
||||
your project.
|
||||
|
||||
Instead, it will copy all the configuration files and the transitive
|
||||
dependencies (Webpack, Babel, ESLint, etc) right into your project so you have
|
||||
full control over them. All of the commands except ``eject`` will still work,
|
||||
but they will point to the copied scripts so you can tweak them. At this point
|
||||
you’re on your own.
|
||||
|
||||
You don’t have to ever use ``eject``. The curated feature set is suitable for
|
||||
small and middle deployments, and you shouldn’t feel obligated to use this
|
||||
feature. However we understand that this tool wouldn’t be useful if you couldn’t
|
||||
customize it when you are ready for it.
|
||||
|
||||
Learn More
|
||||
----------
|
||||
|
||||
You can learn more in the `Create React App documentation
|
||||
<https://facebook.github.io/create-react-app/docs/getting-started>`__.
|
||||
|
||||
To learn React, check out the `React documentation <https://reactjs.org/>`__.
|
||||
-16061
File diff suppressed because it is too large
Load Diff
@@ -1,114 +0,0 @@
|
||||
{
|
||||
"name": "client",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@material-ui/core": "4.11.0",
|
||||
"@material-ui/icons": "^4.9.1",
|
||||
"@material-ui/lab": "^4.0.0-alpha.56",
|
||||
"@reduxjs/toolkit": "^1.3.1",
|
||||
"@types/classnames": "^2.2.10",
|
||||
"@types/jest": "25.1.4",
|
||||
"@types/node": "13.9.5",
|
||||
"@types/react": "16.9.26",
|
||||
"@types/react-dom": "16.9.5",
|
||||
"@types/react-redux": "^7.1.7",
|
||||
"@types/react-router-dom": "^5.1.3",
|
||||
"classnames": "^2.2.6",
|
||||
"react": "^16.13.1",
|
||||
"react-dom": "^16.13.1",
|
||||
"react-redux": "^7.2.0",
|
||||
"react-router-dom": "^5.1.2",
|
||||
"react-scripts": "^3.4.3",
|
||||
"typeface-roboto": "0.0.75",
|
||||
"typescript": "3.8.3",
|
||||
"use-debounce": "^3.4.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"eslint-plugin-import": "^2.20.1",
|
||||
"eslint-plugin-prefer-arrow": "^1.1.7",
|
||||
"prettier": "^2.0.2"
|
||||
},
|
||||
"scripts": {
|
||||
"start": "react-scripts start",
|
||||
"build": "react-scripts build",
|
||||
"test": "react-scripts test",
|
||||
"eject": "react-scripts eject",
|
||||
"lint": "npm run eslint && npm run prettier",
|
||||
"lint-fix": "npm run prettier -- --write && npm run eslint -- --fix",
|
||||
"prettier": "./node_modules/.bin/prettier -c src/",
|
||||
"eslint": "./node_modules/.bin/eslint \"src/**\""
|
||||
},
|
||||
"eslintConfig": {
|
||||
"extends": [
|
||||
"plugin:import/warnings",
|
||||
"react-app"
|
||||
],
|
||||
"plugins": [
|
||||
"prefer-arrow"
|
||||
],
|
||||
"rules": {
|
||||
"@typescript-eslint/consistent-type-definitions": [
|
||||
"error",
|
||||
"type"
|
||||
],
|
||||
"comma-dangle": [
|
||||
"warn",
|
||||
"always-multiline"
|
||||
],
|
||||
"curly": [
|
||||
"warn",
|
||||
"all"
|
||||
],
|
||||
"eqeqeq": [
|
||||
"error",
|
||||
"always"
|
||||
],
|
||||
"import/order": [
|
||||
"warn",
|
||||
{
|
||||
"alphabetize": {
|
||||
"order": "asc",
|
||||
"caseInsensitive": true
|
||||
}
|
||||
}
|
||||
],
|
||||
"no-var": "error",
|
||||
"prefer-arrow/prefer-arrow-functions": [
|
||||
"warn",
|
||||
{
|
||||
"disallowPrototype": true,
|
||||
"singleReturnOnly": false,
|
||||
"classPropertiesAllowed": false
|
||||
}
|
||||
],
|
||||
"prefer-const": "error",
|
||||
"react/jsx-fragments": [
|
||||
"warn",
|
||||
"element"
|
||||
],
|
||||
"sort-imports": [
|
||||
"warn",
|
||||
{
|
||||
"ignoreCase": true,
|
||||
"ignoreDeclarationSort": true
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"prettier": {
|
||||
"trailingComma": "all"
|
||||
},
|
||||
"browserslist": {
|
||||
"production": [
|
||||
">0.2%",
|
||||
"not dead",
|
||||
"not op_mini all"
|
||||
],
|
||||
"development": [
|
||||
"last 1 chrome version",
|
||||
"last 1 firefox version",
|
||||
"last 1 safari version"
|
||||
]
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 4.2 KiB |
@@ -1,32 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<!--
|
||||
Notice the use of %PUBLIC_URL% in the tags above.
|
||||
It will be replaced with the URL of the `public` folder during the build.
|
||||
Only files inside the `public` folder can be referenced from the HTML.
|
||||
|
||||
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
|
||||
work correctly both with client-side routing and a non-root public URL.
|
||||
Learn how to configure a non-root public URL by running `npm run build`.
|
||||
-->
|
||||
<title>Ray Dashboard</title>
|
||||
</head>
|
||||
<body>
|
||||
<noscript>You need to enable JavaScript to run this app.</noscript>
|
||||
<div id="root"></div>
|
||||
<!--
|
||||
This HTML file is a template.
|
||||
If you open it directly in the browser, you will see an empty page.
|
||||
|
||||
You can add webfonts, meta tags, or analytics to this file.
|
||||
The build step will place the bundled scripts into the <body> tag.
|
||||
|
||||
To begin the development, run `npm start` or `yarn start`.
|
||||
To create a production bundle, use `npm run build` or `yarn build`.
|
||||
-->
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,21 +0,0 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2018 Jamie Wong
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -1,2 +0,0 @@
|
||||
This is a self-contained release of https://github.com/jlfwong/speedscope.
|
||||
To use it, open index.html in Chrome or Firefox.
|
||||
File diff suppressed because one or more lines are too long
Binary file not shown.
|
Before Width: | Height: | Size: 679 B |
Binary file not shown.
|
Before Width: | Height: | Size: 1.5 KiB |
@@ -1,324 +0,0 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"definitions": {
|
||||
"FileFormat.Profile": {
|
||||
"anyOf": [
|
||||
{
|
||||
"$ref": "#/definitions/FileFormat.EventedProfile"
|
||||
},
|
||||
{
|
||||
"$ref": "#/definitions/FileFormat.SampledProfile"
|
||||
}
|
||||
]
|
||||
},
|
||||
"FileFormat.File": {
|
||||
"title": "FileFormat.File",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"$schema": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"https://www.speedscope.app/file-format-schema.json"
|
||||
],
|
||||
"title": "$schema"
|
||||
},
|
||||
"shared": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"frames": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/definitions/FileFormat.Frame"
|
||||
},
|
||||
"title": "frames"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"frames"
|
||||
],
|
||||
"title": "shared"
|
||||
},
|
||||
"profiles": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{
|
||||
"$ref": "#/definitions/FileFormat.EventedProfile"
|
||||
},
|
||||
{
|
||||
"$ref": "#/definitions/FileFormat.SampledProfile"
|
||||
}
|
||||
]
|
||||
},
|
||||
"title": "profiles"
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"title": "name"
|
||||
},
|
||||
"activeProfileIndex": {
|
||||
"type": "number",
|
||||
"title": "activeProfileIndex"
|
||||
},
|
||||
"exporter": {
|
||||
"type": "string",
|
||||
"title": "exporter"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"$schema",
|
||||
"profiles",
|
||||
"shared"
|
||||
]
|
||||
},
|
||||
"FileFormat.Frame": {
|
||||
"title": "FileFormat.Frame",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"title": "name"
|
||||
},
|
||||
"file": {
|
||||
"type": "string",
|
||||
"title": "file"
|
||||
},
|
||||
"line": {
|
||||
"type": "number",
|
||||
"title": "line"
|
||||
},
|
||||
"col": {
|
||||
"type": "number",
|
||||
"title": "col"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"name"
|
||||
]
|
||||
},
|
||||
"FileFormat.ProfileType": {
|
||||
"title": "FileFormat.ProfileType",
|
||||
"enum": [
|
||||
"evented",
|
||||
"sampled"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"FileFormat.IProfile": {
|
||||
"title": "FileFormat.IProfile",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"$ref": "#/definitions/FileFormat.ProfileType",
|
||||
"title": "type"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
]
|
||||
},
|
||||
"FileFormat.EventedProfile": {
|
||||
"title": "FileFormat.EventedProfile",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"evented"
|
||||
],
|
||||
"title": "type"
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"title": "name"
|
||||
},
|
||||
"unit": {
|
||||
"$ref": "#/definitions/FileFormat.ValueUnit",
|
||||
"title": "unit"
|
||||
},
|
||||
"startValue": {
|
||||
"type": "number",
|
||||
"title": "startValue"
|
||||
},
|
||||
"endValue": {
|
||||
"type": "number",
|
||||
"title": "endValue"
|
||||
},
|
||||
"events": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{
|
||||
"$ref": "#/definitions/OpenFrameEvent"
|
||||
},
|
||||
{
|
||||
"$ref": "#/definitions/CloseFrameEvent"
|
||||
}
|
||||
]
|
||||
},
|
||||
"title": "events"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"endValue",
|
||||
"events",
|
||||
"name",
|
||||
"startValue",
|
||||
"type",
|
||||
"unit"
|
||||
]
|
||||
},
|
||||
"SampledStack": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "number"
|
||||
}
|
||||
},
|
||||
"FileFormat.SampledProfile": {
|
||||
"title": "FileFormat.SampledProfile",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"sampled"
|
||||
],
|
||||
"title": "type"
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"title": "name"
|
||||
},
|
||||
"unit": {
|
||||
"$ref": "#/definitions/FileFormat.ValueUnit",
|
||||
"title": "unit"
|
||||
},
|
||||
"startValue": {
|
||||
"type": "number",
|
||||
"title": "startValue"
|
||||
},
|
||||
"endValue": {
|
||||
"type": "number",
|
||||
"title": "endValue"
|
||||
},
|
||||
"samples": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "number"
|
||||
}
|
||||
},
|
||||
"title": "samples"
|
||||
},
|
||||
"weights": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "number"
|
||||
},
|
||||
"title": "weights"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"endValue",
|
||||
"name",
|
||||
"samples",
|
||||
"startValue",
|
||||
"type",
|
||||
"unit",
|
||||
"weights"
|
||||
]
|
||||
},
|
||||
"FileFormat.ValueUnit": {
|
||||
"title": "FileFormat.ValueUnit",
|
||||
"enum": [
|
||||
"bytes",
|
||||
"microseconds",
|
||||
"milliseconds",
|
||||
"nanoseconds",
|
||||
"none",
|
||||
"seconds"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"FileFormat.EventType": {
|
||||
"title": "FileFormat.EventType",
|
||||
"enum": [
|
||||
"C",
|
||||
"O"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"IEvent": {
|
||||
"title": "IEvent",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"$ref": "#/definitions/FileFormat.EventType",
|
||||
"title": "type"
|
||||
},
|
||||
"at": {
|
||||
"type": "number",
|
||||
"title": "at"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"at",
|
||||
"type"
|
||||
]
|
||||
},
|
||||
"OpenFrameEvent": {
|
||||
"title": "OpenFrameEvent",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"O"
|
||||
],
|
||||
"title": "type"
|
||||
},
|
||||
"frame": {
|
||||
"type": "number",
|
||||
"title": "frame"
|
||||
},
|
||||
"at": {
|
||||
"type": "number",
|
||||
"title": "at"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"at",
|
||||
"frame",
|
||||
"type"
|
||||
]
|
||||
},
|
||||
"CloseFrameEvent": {
|
||||
"title": "CloseFrameEvent",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"C"
|
||||
],
|
||||
"title": "type"
|
||||
},
|
||||
"frame": {
|
||||
"type": "number",
|
||||
"title": "frame"
|
||||
},
|
||||
"at": {
|
||||
"type": "number",
|
||||
"title": "at"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"at",
|
||||
"frame",
|
||||
"type"
|
||||
]
|
||||
}
|
||||
},
|
||||
"$ref": "#/definitions/FileFormat.File"
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
||||
<!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>speedscope</title> <link href="https://fonts.googleapis.com/css?family=Source+Code+Pro" rel="stylesheet"> <script></script> <link rel="stylesheet" href="reset.7ae984ff.css"> <link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.1165a94e.png"> <link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.361d2b26.png"> </head> <body> <script src="speedscope.75eb7d8e.js"></script> </body> </html>
|
||||
-199
@@ -1,199 +0,0 @@
|
||||
java;read;check_events_[k];hypercall_page_[k] 1
|
||||
java;start_thread;java_start;GCTaskThread::run;ScavengeRootsTask::do_it;ClassLoaderDataGraph::oops_do;ClassLoaderData::oops_do;PSScavengeKlassClosure::do_klass 1
|
||||
java;start_thread;java_start;GCTaskThread::run;StealTask::do_it;PSPromotionManager::drain_stacks_depth;oopDesc* PSPromotionManager::copy_to_survivor_space<false>;InstanceKlass::oop_push_contents 1
|
||||
java;start_thread;java_start;GCTaskThread::run;StealTask::do_it;ParallelTaskTerminator::offer_termination 5
|
||||
java;start_thread;java_start;GCTaskThread::run;StealTask::do_it;SpinPause 7
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/buffer/AbstractByteBufAllocator:.directBuffer_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j] 2
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/AbstractReferenceCountedByteBuf:.release_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];io/netty/buffer/PooledByteBuf:.internalNioBuffer_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/NativeThread:.current_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j]; 3
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];Java_sun_nio_ch_FileDispatcherImpl_write0 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;sys_write_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];fget_light_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];__srcu_read_lock_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];__tcp_push_pending_frames_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k] 2
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];__tcp_push_pending_frames_[k];tcp_write_xmit_[k];ktime_get_real_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];__tcp_push_pending_frames_[k];tcp_write_xmit_[k];skb_clone_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];__tcp_push_pending_frames_[k];tcp_write_xmit_[k];tcp_set_skb_tso_segs_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];__tcp_push_pending_frames_[k];tcp_write_xmit_[k];tcp_transmit_skb_[k] 2
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];__tcp_push_pending_frames_[k];tcp_write_xmit_[k];tcp_transmit_skb_[k];ip_queue_xmit_[k];ip_local_out_[k];ip_output_[k];ip_finish_output_[k];dev_hard_start_xmit_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];__tcp_push_pending_frames_[k];tcp_write_xmit_[k];tcp_transmit_skb_[k];ip_queue_xmit_[k];ip_local_out_[k];ip_output_[k];ip_finish_output_[k];dev_pick_tx_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];__tcp_push_pending_frames_[k];tcp_write_xmit_[k];tcp_transmit_skb_[k];ip_queue_xmit_[k];ip_local_out_[k];ip_output_[k];ip_finish_output_[k];dev_queue_xmit_[k];dev_hard_start_xmit_[k];dev_queue_xmit_nit_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];__tcp_push_pending_frames_[k];tcp_write_xmit_[k];tcp_transmit_skb_[k];ip_queue_xmit_[k];ip_local_out_[k];ip_output_[k];ip_finish_output_[k];dev_queue_xmit_[k];dev_hard_start_xmit_[k];loopback_xmit_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];__tcp_push_pending_frames_[k];tcp_write_xmit_[k];tcp_transmit_skb_[k];ip_queue_xmit_[k];ip_local_out_[k];ip_output_[k];ip_finish_output_[k];dev_queue_xmit_[k];dev_hard_start_xmit_[k];loopback_xmit_[k];netif_rx_[k];netif_rx.part.82_[k];xen_restore_fl_direct_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];__tcp_push_pending_frames_[k];tcp_write_xmit_[k];tcp_transmit_skb_[k];ip_queue_xmit_[k];ip_local_out_[k];ip_output_[k];ip_finish_output_[k];dev_queue_xmit_[k];dev_hard_start_xmit_[k];loopback_xmit_[k];netif_rx_[k];netif_rx.part.82_[k];xen_restore_fl_direct_end_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];__tcp_push_pending_frames_[k];tcp_write_xmit_[k];tcp_transmit_skb_[k];ip_queue_xmit_[k];ip_local_out_[k];ip_output_[k];ip_finish_output_[k];dev_queue_xmit_[k];local_bh_enable_[k];do_softirq_[k];call_softirq_[k];__do_softirq_[k];net_rx_action_[k];dma_issue_pending_all_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];__tcp_push_pending_frames_[k];tcp_write_xmit_[k];tcp_transmit_skb_[k];ip_queue_xmit_[k];ip_local_out_[k];ip_output_[k];ip_finish_output_[k];dev_queue_xmit_[k];local_bh_enable_[k];do_softirq_[k];call_softirq_[k];__do_softirq_[k];net_rx_action_[k];process_backlog_[k];__netif_receive_skb_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];__tcp_push_pending_frames_[k];tcp_write_xmit_[k];tcp_transmit_skb_[k];ip_queue_xmit_[k];ip_local_out_[k];ip_output_[k];ip_finish_output_[k];dev_queue_xmit_[k];local_bh_enable_[k];do_softirq_[k];call_softirq_[k];__do_softirq_[k];net_rx_action_[k];process_backlog_[k];__netif_receive_skb_[k];ip_rcv_[k];ip_rcv_finish_[k];ip_local_deliver_[k];ip_local_deliver_finish_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];__tcp_push_pending_frames_[k];tcp_write_xmit_[k];tcp_transmit_skb_[k];ip_queue_xmit_[k];ip_local_out_[k];ip_output_[k];ip_finish_output_[k];dev_queue_xmit_[k];local_bh_enable_[k];do_softirq_[k];call_softirq_[k];__do_softirq_[k];net_rx_action_[k];process_backlog_[k];__netif_receive_skb_[k];ip_rcv_[k];ip_rcv_finish_[k];ip_local_deliver_[k];ip_local_deliver_finish_[k];tcp_v4_rcv_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];__tcp_push_pending_frames_[k];tcp_write_xmit_[k];tcp_transmit_skb_[k];ip_queue_xmit_[k];ip_local_out_[k];ip_output_[k];ip_finish_output_[k];dev_queue_xmit_[k];local_bh_enable_[k];do_softirq_[k];call_softirq_[k];__do_softirq_[k];net_rx_action_[k];process_backlog_[k];__netif_receive_skb_[k];ip_rcv_[k];ip_rcv_finish_[k];ip_local_deliver_[k];ip_local_deliver_finish_[k];tcp_v4_rcv_[k];__inet_lookup_established_[k] 3
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];__tcp_push_pending_frames_[k];tcp_write_xmit_[k];tcp_transmit_skb_[k];ip_queue_xmit_[k];ip_local_out_[k];ip_output_[k];ip_finish_output_[k];dev_queue_xmit_[k];local_bh_enable_[k];do_softirq_[k];call_softirq_[k];__do_softirq_[k];net_rx_action_[k];process_backlog_[k];__netif_receive_skb_[k];ip_rcv_[k];ip_rcv_finish_[k];ip_local_deliver_[k];ip_local_deliver_finish_[k];tcp_v4_rcv_[k];tcp_v4_do_rcv_[k];tcp_event_data_recv_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];__tcp_push_pending_frames_[k];tcp_write_xmit_[k];tcp_transmit_skb_[k];ip_queue_xmit_[k];ip_local_out_[k];ip_output_[k];ip_finish_output_[k];dev_queue_xmit_[k];local_bh_enable_[k];do_softirq_[k];call_softirq_[k];__do_softirq_[k];net_rx_action_[k];process_backlog_[k];__netif_receive_skb_[k];ip_rcv_[k];ip_rcv_finish_[k];ip_local_deliver_[k];ip_local_deliver_finish_[k];tcp_v4_rcv_[k];tcp_v4_do_rcv_[k];tcp_rcv_established_[k];sock_def_readable_[k];__wake_up_sync_key_[k];check_events_[k];hypercall_page_[k] 19
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];__tcp_push_pending_frames_[k];tcp_write_xmit_[k];tcp_transmit_skb_[k];ip_queue_xmit_[k];ip_local_out_[k];ip_output_[k];ip_finish_output_[k];dev_queue_xmit_[k];local_bh_enable_[k];do_softirq_[k];call_softirq_[k];__do_softirq_[k];net_rx_action_[k];process_backlog_[k];__netif_receive_skb_[k];ip_rcv_[k];ip_rcv_finish_[k];ip_local_deliver_[k];ip_local_deliver_finish_[k];tcp_v4_rcv_[k];tcp_v4_do_rcv_[k];tcp_rcv_established_[k];tcp_ack_[k] 3
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];__tcp_push_pending_frames_[k];tcp_write_xmit_[k];tcp_transmit_skb_[k];ip_queue_xmit_[k];ip_local_out_[k];ip_output_[k];ip_finish_output_[k];dev_queue_xmit_[k];local_bh_enable_[k];do_softirq_[k];call_softirq_[k];__do_softirq_[k];net_rx_action_[k];process_backlog_[k];__netif_receive_skb_[k];ip_rcv_[k];ip_rcv_finish_[k];ip_local_deliver_[k];ip_local_deliver_finish_[k];tcp_v4_rcv_[k];tcp_v4_do_rcv_[k];tcp_rcv_established_[k];tcp_ack_[k];tcp_clean_rtx_queue_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];__tcp_push_pending_frames_[k];tcp_write_xmit_[k];tcp_transmit_skb_[k];ip_queue_xmit_[k];ip_local_out_[k];ip_output_[k];ip_finish_output_[k];dev_queue_xmit_[k];local_bh_enable_[k];do_softirq_[k];call_softirq_[k];__do_softirq_[k];net_rx_action_[k];process_backlog_[k];__netif_receive_skb_[k];ip_rcv_[k];ip_rcv_finish_[k];ip_local_deliver_[k];ip_local_deliver_finish_[k];tcp_v4_rcv_[k];tcp_v4_do_rcv_[k];tcp_rcv_established_[k];tcp_ack_[k];tcp_clean_rtx_queue_[k];bictcp_acked_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];__tcp_push_pending_frames_[k];tcp_write_xmit_[k];tcp_transmit_skb_[k];ip_queue_xmit_[k];ip_local_out_[k];ip_output_[k];ip_finish_output_[k];dev_queue_xmit_[k];local_bh_enable_[k];do_softirq_[k];call_softirq_[k];__do_softirq_[k];net_rx_action_[k];process_backlog_[k];__netif_receive_skb_[k];ip_rcv_[k];ip_rcv_finish_[k];ip_local_deliver_[k];ip_local_deliver_finish_[k];tcp_v4_rcv_[k];tcp_v4_do_rcv_[k];tcp_rcv_established_[k];tcp_ack_[k];tcp_clean_rtx_queue_[k];ktime_get_real_[k];getnstimeofday_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];__tcp_push_pending_frames_[k];tcp_write_xmit_[k];tcp_transmit_skb_[k];ip_queue_xmit_[k];ip_local_out_[k];ip_output_[k];ip_finish_output_[k];dev_queue_xmit_[k];local_bh_enable_[k];do_softirq_[k];call_softirq_[k];__do_softirq_[k];net_rx_action_[k];process_backlog_[k];__netif_receive_skb_[k];ip_rcv_[k];ip_rcv_finish_[k];ip_local_deliver_[k];ip_local_deliver_finish_[k];tcp_v4_rcv_[k];tcp_v4_do_rcv_[k];tcp_rcv_established_[k];tcp_ack_[k];tcp_clean_rtx_queue_[k];ktime_get_real_[k];getnstimeofday_[k];xen_clocksource_get_cycles_[k];xen_clocksource_read_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];__tcp_push_pending_frames_[k];tcp_write_xmit_[k];tcp_transmit_skb_[k];ip_queue_xmit_[k];ip_local_out_[k];ip_output_[k];ip_finish_output_[k];dev_queue_xmit_[k];local_bh_enable_[k];do_softirq_[k];call_softirq_[k];__do_softirq_[k];net_rx_action_[k];process_backlog_[k];__netif_receive_skb_[k];ip_rcv_[k];ip_rcv_finish_[k];ip_local_deliver_[k];ip_local_deliver_finish_[k];tcp_v4_rcv_[k];tcp_v4_do_rcv_[k];tcp_rcv_established_[k];tcp_ack_[k];tcp_clean_rtx_queue_[k];tcp_rtt_estimator_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];__tcp_push_pending_frames_[k];tcp_write_xmit_[k];tcp_transmit_skb_[k];ip_queue_xmit_[k];ip_local_out_[k];ip_output_[k];ip_finish_output_[k];dev_queue_xmit_[k];local_bh_enable_[k];do_softirq_[k];call_softirq_[k];__do_softirq_[k];net_rx_action_[k];process_backlog_[k];__netif_receive_skb_[k];ip_rcv_[k];ip_rcv_finish_[k];ip_local_deliver_[k];ip_local_deliver_finish_[k];tcp_v4_rcv_[k];tcp_v4_do_rcv_[k];tcp_rcv_established_[k];tcp_ack_[k];tcp_clean_rtx_queue_[k];tcp_valid_rtt_meas_[k];tcp_rtt_estimator_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];__tcp_push_pending_frames_[k];tcp_write_xmit_[k];tcp_transmit_skb_[k];ip_queue_xmit_[k];ip_local_out_[k];ip_output_[k];ip_finish_output_[k];dev_queue_xmit_[k];local_bh_enable_[k];do_softirq_[k];call_softirq_[k];__do_softirq_[k];net_rx_action_[k];process_backlog_[k];__netif_receive_skb_[k];ip_rcv_[k];ip_rcv_finish_[k];ip_local_deliver_finish_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];__tcp_push_pending_frames_[k];tcp_write_xmit_[k];tcp_transmit_skb_[k];ip_queue_xmit_[k];ip_local_out_[k];ip_output_[k];ip_finish_output_[k];dev_queue_xmit_[k];local_bh_enable_[k];do_softirq_[k];call_softirq_[k];rcu_bh_qs_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];__tcp_push_pending_frames_[k];tcp_write_xmit_[k];tcp_transmit_skb_[k];ip_queue_xmit_[k];ip_local_out_[k];ip_output_[k];ip_finish_output_[k];dev_queue_xmit_[k];netif_skb_features_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];__tcp_push_pending_frames_[k];tcp_write_xmit_[k];tcp_transmit_skb_[k];ip_queue_xmit_[k];ip_output_[k] 2
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];__tcp_push_pending_frames_[k];tcp_write_xmit_[k];tcp_transmit_skb_[k];ktime_get_real_[k];getnstimeofday_[k];xen_clocksource_get_cycles_[k];pvclock_clocksource_read_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];__tcp_push_pending_frames_[k];tcp_write_xmit_[k];tcp_transmit_skb_[k];ktime_get_real_[k];getnstimeofday_[k];xen_clocksource_get_cycles_[k];xen_clocksource_read_[k];pvclock_clocksource_read_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];__tcp_push_pending_frames_[k];tcp_write_xmit_[k];tcp_transmit_skb_[k];ktime_get_real_[k];xen_clocksource_get_cycles_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];__tcp_push_pending_frames_[k];tcp_write_xmit_[k];tcp_transmit_skb_[k];skb_dst_set_noref_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];lock_sock_nested_[k];_raw_spin_lock_bh_[k];local_bh_disable_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];sk_stream_alloc_skb_[k];__alloc_skb_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];sk_stream_alloc_skb_[k];__alloc_skb_[k];__kmalloc_node_track_caller_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];sk_stream_alloc_skb_[k];__alloc_skb_[k];__kmalloc_node_track_caller_[k];arch_local_irq_save_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];sk_stream_alloc_skb_[k];__alloc_skb_[k];__phys_addr_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];sk_stream_alloc_skb_[k];__alloc_skb_[k];get_slab_[k] 2
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];sk_stream_alloc_skb_[k];__alloc_skb_[k];kmem_cache_alloc_node_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];sk_stream_alloc_skb_[k];ksize_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];tcp_send_mss_[k];tcp_current_mss_[k];ipv4_mtu_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];tcp_send_mss_[k];tcp_current_mss_[k];tcp_established_options_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];tcp_send_mss_[k];tcp_xmit_size_goal_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];do_sync_write_[k];sock_aio_write_[k];do_sock_write.isra.10_[k];inet_sendmsg_[k];tcp_sendmsg_[k];tcp_xmit_size_goal_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];fsnotify_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];fsnotify_[k];__srcu_read_lock_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];rw_verify_area_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];rw_verify_area_[k];apparmor_file_permission_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];rw_verify_area_[k];security_file_permission_[k];apparmor_file_permission_[k];common_file_perm_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/FileDispatcherImpl:.write0_[j];write;system_call_fastpath_[k];sys_write_[k];vfs_write_[k];sock_aio_write_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.write_[j];sun/nio/ch/SocketChannelImpl:.writerCleanup_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes_[j];sun/nio/ch/SocketChannelImpl:.writerCleanup_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/ChannelOutboundHandlerAdapter:.flush_[j];io/netty/channel/AbstractChannelHandlerContext:.flush_[j];io/netty/channel/DefaultChannelPipeline$HeadContext:.flush_[j];io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0_[j];io/netty/channel/nio/AbstractNioByteChannel:.doWrite_[j];io/netty/util/Recycler:.recycle_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j];io/netty/channel/ChannelDuplexHandler:.flush_[j] 2
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j];org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/buffer/AbstractReferenceCountedByteBuf:.release_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];java/util/concurrent/ConcurrentHashMap:.get_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/mozilla/javascript/Context:.getWrapFactory_[j] 2
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j] 3
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/ScriptableObject:.getParentScope_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/WrapFactory:.wrapAsJavaObject_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/WrapFactory:.wrapAsJavaObject_[j];java/util/HashMap:.get_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/WrapFactory:.wrap_[j];java/util/HashMap:.get_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.getObjectProp_[j] 2
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.getObjectProp_[j];org/mozilla/javascript/ScriptableObject$RelinkedSlot:.getValue_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.getObjectProp_[j];vtable chunks_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.nameOrFunction_[j];org/mozilla/javascript/ScriptableObject$Slot:.getValue_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.name_[j];org/mozilla/javascript/IdScriptableObject:.get_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.getPropFunctionAndThis_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/IdScriptableObject:.findInstanceIdInfo_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/IdScriptableObject:.has_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/IdScriptableObject:.has_[j];org/mozilla/javascript/ScriptableObject:.getSlot_[j] 2
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/IdScriptableObject:.put_[j];org/mozilla/javascript/ScriptableObject:.getSlot_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/IdScriptableObject:.setAttributes_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/MemberBox:.invoke_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/NativeJavaMethod:.call_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/NativeJavaMethod:.call_[j];org/mozilla/javascript/WrapFactory:.wrap_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/NativeJavaMethod:.findFunction_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/NativeJavaObject:.get_[j] 2
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.createFunctionActivation_[j];org/mozilla/javascript/IdScriptableObject:.get_[j];org/mozilla/javascript/ScriptableObject:.getSlot_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.createFunctionActivation_[j];org/mozilla/javascript/IdScriptableObject:.put_[j];org/mozilla/javascript/ScriptableObject:.getSlot_[j];org/mozilla/javascript/ScriptableObject:.createSlot_[j] 2
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.createFunctionActivation_[j];org/mozilla/javascript/IdScriptableObject:.setAttributes_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.createFunctionActivation_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.getObjectProp_[j];org/mozilla/javascript/ScriptableObject$Slot:.getValue_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.getPropFunctionAndThis_[j];org/mozilla/javascript/NativeJavaObject:.get_[j];java/util/HashMap:.get_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.newObject_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.newObject_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];jint_disjoint_arraycopy_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.newObject_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/IdScriptableObject:.get_[j] 2
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.newObject_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/IdScriptableObject:.has_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.newObject_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.createFunctionActivation_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.newObject_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.createFunctionActivation_[j];org/mozilla/javascript/IdScriptableObject:.put_[j];org/mozilla/javascript/ScriptableObject:.getSlot_[j];org/mozilla/javascript/ScriptableObject:.createSlot_[j] 2
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.newObject_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.createFunctionActivation_[j];org/mozilla/javascript/IdScriptableObject:.setAttributes_[j] 2
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.newObject_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.getObjectProp_[j];org/mozilla/javascript/IdScriptableObject:.get_[j];org/mozilla/javascript/ScriptableObject:.getSlot_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.newObject_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.nameOrFunction_[j];org/mozilla/javascript/IdScriptableObject:.get_[j];org/mozilla/javascript/ScriptableObject$RelinkedSlot:.getValue_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.newObject_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.setObjectProp_[j];org/mozilla/javascript/IdScriptableObject:.findInstanceIdInfo_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.newObject_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.setObjectProp_[j];org/mozilla/javascript/IdScriptableObject:.put_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.newObject_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.setObjectProp_[j];org/mozilla/javascript/IdScriptableObject:.put_[j];org/mozilla/javascript/ScriptableObject:.getSlot_[j];org/mozilla/javascript/ScriptableObject:.createSlot_[j] 3
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.newObject_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.setObjectProp_[j];org/mozilla/javascript/ScriptableObject:.getSlot_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.newObject_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.setObjectProp_[j];vtable chunks_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.newObject_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/optimizer/OptRuntime:.call2_[j];org/mozilla/javascript/NativeFunction:.initScriptFunction_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.newObject_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/optimizer/OptRuntime:.call2_[j];org/mozilla/javascript/ScriptRuntime:.createFunctionActivation_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.newObject_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/optimizer/OptRuntime:.call2_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.createFunctionActivation_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.newObject_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/optimizer/OptRuntime:.call2_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.createFunctionActivation_[j];org/mozilla/javascript/IdScriptableObject:.get_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.newObject_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/optimizer/OptRuntime:.call2_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.setObjectProp_[j];org/mozilla/javascript/IdScriptableObject:.has_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.newObject_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/optimizer/OptRuntime:.call2_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.setObjectProp_[j];org/mozilla/javascript/IdScriptableObject:.put_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.newObject_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/optimizer/OptRuntime:.call2_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.setObjectProp_[j];org/mozilla/javascript/IdScriptableObject:.put_[j];org/mozilla/javascript/ScriptableObject:.getSlot_[j];org/mozilla/javascript/ScriptableObject:.createSlot_[j] 6
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.newObject_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/optimizer/OptRuntime:.call2_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptableObject:.getParentScope_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.setObjectProp_[j];org/mozilla/javascript/IdScriptableObject:.has_[j] 4
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.setObjectProp_[j];org/mozilla/javascript/IdScriptableObject:.has_[j];org/mozilla/javascript/ScriptableObject:.getSlot_[j] 5
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.setObjectProp_[j];org/mozilla/javascript/IdScriptableObject:.put_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.setObjectProp_[j];org/mozilla/javascript/IdScriptableObject:.put_[j];org/mozilla/javascript/ScriptableObject:.getSlot_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.setObjectProp_[j];org/mozilla/javascript/IdScriptableObject:.put_[j];org/mozilla/javascript/ScriptableObject:.getSlot_[j];org/mozilla/javascript/ScriptableObject:.createSlot_[j] 6
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptableObject:.getPrototype_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptableObject:.getParentScope_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/TopLevel:.getBuiltinPrototype_[j] 2
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/optimizer/OptRuntime:.call2_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/optimizer/OptRuntime:.call2_[j];org/mozilla/javascript/ScriptRuntime:.name_[j];org/mozilla/javascript/ScriptRuntime:.nameOrFunction_[j];vtable chunks_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/optimizer/OptRuntime:.call2_[j];org/mozilla/javascript/ScriptRuntime:.setObjectProp_[j];org/mozilla/javascript/IdScriptableObject:.has_[j];org/mozilla/javascript/ScriptableObject:.getSlot_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/optimizer/OptRuntime:.call2_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.createFunctionActivation_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/optimizer/OptRuntime:.call2_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.createFunctionActivation_[j];org/mozilla/javascript/IdScriptableObject:.setAttributes_[j] 2
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/optimizer/OptRuntime:.call2_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.createFunctionActivation_[j];org/mozilla/javascript/TopLevel:.getBuiltinPrototype_[j] 2
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/optimizer/OptRuntime:.call2_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.setObjectProp_[j];org/mozilla/javascript/IdScriptableObject:.put_[j];org/mozilla/javascript/ScriptableObject:.getSlot_[j];org/mozilla/javascript/ScriptableObject:.createSlot_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vhello_js_1:.call_[j];org/mozilla/javascript/ScriptRuntime:.indexFromString_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vhello_js_1:.call_[j];org/mozilla/javascript/ScriptRuntime:.setObjectElem_[j];org/mozilla/javascript/ScriptRuntime:.indexFromString_[j] 2
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vhello_js_1:.call_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j] 2
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vhello_js_1:.call_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/NativeJavaMethod:.call_[j];org/mozilla/javascript/MemberBox:.invoke_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vhello_js_1:.call_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/NativeJavaMethod:.call_[j];org/mozilla/javascript/MemberBox:.invoke_[j];io/netty/handler/codec/http/DefaultHttpHeaders:.set_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vhello_js_1:.call_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/NativeJavaMethod:.call_[j];org/mozilla/javascript/MemberBox:.invoke_[j];sun/reflect/DelegatingMethodAccessorImpl:.invoke_[j] 3
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vhello_js_1:.call_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/NativeJavaMethod:.call_[j];org/mozilla/javascript/MemberBox:.invoke_[j];sun/reflect/DelegatingMethodAccessorImpl:.invoke_[j];io/netty/channel/AbstractChannelHandlerContext:.write_[j];io/netty/channel/AbstractChannelHandlerContext:.write_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vhello_js_1:.call_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/NativeJavaMethod:.call_[j];org/mozilla/javascript/MemberBox:.invoke_[j];sun/reflect/DelegatingMethodAccessorImpl:.invoke_[j];io/netty/channel/AbstractChannelHandlerContext:.write_[j];io/netty/channel/AbstractChannelHandlerContext:.write_[j];org/vertx/java/core/http/impl/VertxHttpHandler:.write_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vhello_js_1:.call_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/NativeJavaMethod:.call_[j];org/mozilla/javascript/MemberBox:.invoke_[j];sun/reflect/DelegatingMethodAccessorImpl:.invoke_[j];io/netty/channel/AbstractChannelHandlerContext:.write_[j];io/netty/channel/AbstractChannelHandlerContext:.write_[j];org/vertx/java/core/http/impl/VertxHttpHandler:.write_[j];io/netty/channel/AbstractChannelHandlerContext:.write_[j];io/netty/handler/codec/MessageToMessageEncoder:.write_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vhello_js_1:.call_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/NativeJavaMethod:.call_[j];org/mozilla/javascript/MemberBox:.invoke_[j];sun/reflect/DelegatingMethodAccessorImpl:.invoke_[j];io/netty/channel/AbstractChannelHandlerContext:.write_[j];io/netty/channel/AbstractChannelHandlerContext:.write_[j];org/vertx/java/core/http/impl/VertxHttpHandler:.write_[j];io/netty/channel/AbstractChannelHandlerContext:.write_[j];io/netty/handler/codec/MessageToMessageEncoder:.write_[j];io/netty/buffer/AbstractByteBuf:.writeBytes_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vhello_js_1:.call_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/NativeJavaMethod:.call_[j];org/mozilla/javascript/MemberBox:.invoke_[j];sun/reflect/DelegatingMethodAccessorImpl:.invoke_[j];io/netty/channel/AbstractChannelHandlerContext:.write_[j];io/netty/channel/AbstractChannelHandlerContext:.write_[j];org/vertx/java/core/http/impl/VertxHttpHandler:.write_[j];io/netty/channel/AbstractChannelHandlerContext:.write_[j];io/netty/handler/codec/MessageToMessageEncoder:.write_[j];io/netty/handler/codec/http/HttpObjectEncoder:.encode_[j];io/netty/buffer/AbstractByteBuf:.writeBytes_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vhello_js_1:.call_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/NativeJavaMethod:.call_[j];org/mozilla/javascript/MemberBox:.invoke_[j];sun/reflect/DelegatingMethodAccessorImpl:.invoke_[j];io/netty/channel/AbstractChannelHandlerContext:.write_[j];io/netty/channel/AbstractChannelHandlerContext:.write_[j];org/vertx/java/core/http/impl/VertxHttpHandler:.write_[j];io/netty/channel/AbstractChannelHandlerContext:.write_[j];io/netty/handler/codec/MessageToMessageEncoder:.write_[j];io/netty/handler/codec/http/HttpObjectEncoder:.encode_[j];io/netty/buffer/AbstractByteBufAllocator:.directBuffer_[j] 2
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vhello_js_1:.call_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/NativeJavaMethod:.call_[j];org/mozilla/javascript/MemberBox:.invoke_[j];sun/reflect/DelegatingMethodAccessorImpl:.invoke_[j];io/netty/channel/AbstractChannelHandlerContext:.write_[j];io/netty/channel/AbstractChannelHandlerContext:.write_[j];org/vertx/java/core/http/impl/VertxHttpHandler:.write_[j];io/netty/channel/AbstractChannelHandlerContext:.write_[j];io/netty/handler/codec/MessageToMessageEncoder:.write_[j];io/netty/handler/codec/http/HttpObjectEncoder:.encode_[j];io/netty/buffer/AbstractByteBufAllocator:.directBuffer_[j];io/netty/util/concurrent/FastThreadLocal:.get_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vhello_js_1:.call_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/NativeJavaMethod:.call_[j];org/mozilla/javascript/MemberBox:.invoke_[j];sun/reflect/DelegatingMethodAccessorImpl:.invoke_[j];io/netty/channel/AbstractChannelHandlerContext:.write_[j];io/netty/channel/AbstractChannelHandlerContext:.write_[j];org/vertx/java/core/http/impl/VertxHttpHandler:.write_[j];io/netty/channel/AbstractChannelHandlerContext:.write_[j];io/netty/handler/codec/MessageToMessageEncoder:.write_[j];io/netty/handler/codec/http/HttpObjectEncoder:.encode_[j];java/util/ArrayList:.add_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vhello_js_1:.call_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/NativeJavaMethod:.call_[j];org/mozilla/javascript/MemberBox:.invoke_[j];sun/reflect/DelegatingMethodAccessorImpl:.invoke_[j];io/netty/channel/AbstractChannelHandlerContext:.write_[j];io/netty/channel/AbstractChannelHandlerContext:.write_[j];org/vertx/java/core/http/impl/VertxHttpHandler:.write_[j];io/netty/channel/AbstractChannelHandlerContext:.write_[j];io/netty/handler/codec/MessageToMessageEncoder:.write_[j];io/netty/util/internal/RecyclableArrayList:.newInstance_[j];io/netty/util/concurrent/FastThreadLocal:.get_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vhello_js_1:.call_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/NativeJavaMethod:.call_[j];org/mozilla/javascript/MemberBox:.invoke_[j];sun/reflect/DelegatingMethodAccessorImpl:.invoke_[j];io/netty/channel/AbstractChannelHandlerContext:.write_[j];io/netty/channel/AbstractChannelHandlerContext:.write_[j];org/vertx/java/core/http/impl/VertxHttpHandler:.write_[j];io/netty/channel/AbstractChannelHandlerContext:.write_[j];io/netty/handler/codec/MessageToMessageEncoder:.write_[j];java/util/ArrayList:.ensureExplicitCapacity_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vhello_js_1:.call_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/NativeJavaMethod:.call_[j];org/mozilla/javascript/MemberBox:.invoke_[j];sun/reflect/DelegatingMethodAccessorImpl:.invoke_[j];io/netty/channel/AbstractChannelHandlerContext:.write_[j];io/netty/channel/AbstractChannelHandlerContext:.write_[j];org/vertx/java/core/http/impl/VertxHttpHandler:.write_[j];io/netty/channel/AbstractChannelHandlerContext:.write_[j];io/netty/handler/codec/MessageToMessageEncoder:.write_[j];vtable chunks_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vhello_js_1:.call_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/NativeJavaMethod:.call_[j];org/mozilla/javascript/MemberBox:.invoke_[j];sun/reflect/DelegatingMethodAccessorImpl:.invoke_[j];io/netty/channel/AbstractChannelHandlerContext:.write_[j];org/vertx/java/core/http/impl/VertxHttpHandler:.write_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vhello_js_1:.call_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/NativeJavaMethod:.call_[j];org/mozilla/javascript/MemberBox:.invoke_[j];sun/reflect/DelegatingMethodAccessorImpl:.invoke_[j];io/netty/handler/codec/http/DefaultHttpHeaders:.add0_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vhello_js_1:.call_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/NativeJavaMethod:.call_[j];org/mozilla/javascript/MemberBox:.invoke_[j];sun/reflect/DelegatingMethodAccessorImpl:.invoke_[j];io/netty/handler/codec/http/DefaultHttpHeaders:.set_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vhello_js_1:.call_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/NativeJavaMethod:.call_[j];org/mozilla/javascript/MemberBox:.invoke_[j];sun/reflect/DelegatingMethodAccessorImpl:.invoke_[j];sun/nio/cs/UTF_8$Encoder:.<init>_[j];jbyte_disjoint_arraycopy_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];org/vertx/java/core/net/impl/VertxHandler:.channelRead_[j];org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vhello_js_1:.call_[j];org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0_[j];org/mozilla/javascript/ScriptRuntime:.name_[j];org/mozilla/javascript/ScriptRuntime:.nameOrFunction_[j];org/mozilla/javascript/IdScriptableObject:.get_[j];org/mozilla/javascript/ScriptableObject$RelinkedSlot:.getValue_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/handler/codec/http/HttpObjectDecoder:.decode_[j];io/netty/buffer/AbstractByteBuf:.forEachByteAsc0_[j];io/netty/util/internal/AppendableCharSequence:.append_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/handler/codec/http/HttpObjectDecoder:.decode_[j];io/netty/handler/codec/http/HttpHeaders:.isTransferEncodingChunked_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/handler/codec/http/HttpObjectDecoder:.decode_[j];io/netty/handler/codec/http/HttpObjectDecoder:.findWhitespace_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/handler/codec/http/HttpObjectDecoder:.decode_[j];io/netty/handler/codec/http/HttpObjectDecoder:.readHeaders_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/handler/codec/http/HttpObjectDecoder:.decode_[j];io/netty/handler/codec/http/HttpObjectDecoder:.readHeaders_[j];io/netty/buffer/AbstractByteBuf:.forEachByteAsc0_[j] 2
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/handler/codec/http/HttpObjectDecoder:.decode_[j];io/netty/handler/codec/http/HttpObjectDecoder:.readHeaders_[j];io/netty/handler/codec/http/HttpHeaders:.hash_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/handler/codec/http/HttpObjectDecoder:.decode_[j];io/netty/handler/codec/http/HttpObjectDecoder:.readHeaders_[j];io/netty/handler/codec/http/HttpObjectDecoder:.splitHeader_[j] 5
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelRead_[j];io/netty/handler/codec/http/HttpObjectDecoder:.decode_[j];io/netty/handler/codec/http/HttpObjectDecoder:.readHeaders_[j];java/util/Arrays:.fill_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/socket/nio/NioSocketChannel:.doReadBytes_[j];sun/nio/ch/SocketChannelImpl:.read_[j];java/nio/channels/spi/AbstractInterruptibleChannel:.end_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/socket/nio/NioSocketChannel:.doReadBytes_[j];sun/nio/ch/SocketChannelImpl:.read_[j];sun/nio/ch/FileDispatcherImpl:.read0_[j];read 2
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/socket/nio/NioSocketChannel:.doReadBytes_[j];sun/nio/ch/SocketChannelImpl:.read_[j];sun/nio/ch/FileDispatcherImpl:.read0_[j];read;sys_read_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/socket/nio/NioSocketChannel:.doReadBytes_[j];sun/nio/ch/SocketChannelImpl:.read_[j];sun/nio/ch/FileDispatcherImpl:.read0_[j];read;system_call_fastpath_[k];sys_read_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/socket/nio/NioSocketChannel:.doReadBytes_[j];sun/nio/ch/SocketChannelImpl:.read_[j];sun/nio/ch/FileDispatcherImpl:.read0_[j];read;system_call_fastpath_[k];sys_read_[k];do_sync_read_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/socket/nio/NioSocketChannel:.doReadBytes_[j];sun/nio/ch/SocketChannelImpl:.read_[j];sun/nio/ch/FileDispatcherImpl:.read0_[j];read;system_call_fastpath_[k];sys_read_[k];vfs_read_[k];do_sync_read_[k];sock_aio_read_[k];sock_aio_read.part.13_[k];do_sock_read.isra.12_[k];inet_recvmsg_[k];__kfree_skb_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/socket/nio/NioSocketChannel:.doReadBytes_[j];sun/nio/ch/SocketChannelImpl:.read_[j];sun/nio/ch/FileDispatcherImpl:.read0_[j];read;system_call_fastpath_[k];sys_read_[k];vfs_read_[k];do_sync_read_[k];sock_aio_read_[k];sock_aio_read.part.13_[k];do_sock_read.isra.12_[k];inet_recvmsg_[k];tcp_rcv_space_adjust_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/socket/nio/NioSocketChannel:.doReadBytes_[j];sun/nio/ch/SocketChannelImpl:.read_[j];sun/nio/ch/FileDispatcherImpl:.read0_[j];read;system_call_fastpath_[k];sys_read_[k];vfs_read_[k];do_sync_read_[k];sock_aio_read_[k];sock_aio_read.part.13_[k];do_sock_read.isra.12_[k];inet_recvmsg_[k];tcp_recvmsg_[k];__kfree_skb_[k];skb_release_data_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/socket/nio/NioSocketChannel:.doReadBytes_[j];sun/nio/ch/SocketChannelImpl:.read_[j];sun/nio/ch/FileDispatcherImpl:.read0_[j];read;system_call_fastpath_[k];sys_read_[k];vfs_read_[k];do_sync_read_[k];sock_aio_read_[k];sock_aio_read.part.13_[k];do_sock_read.isra.12_[k];inet_recvmsg_[k];tcp_recvmsg_[k];__kfree_skb_[k];skb_release_head_state_[k];dst_release_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/socket/nio/NioSocketChannel:.doReadBytes_[j];sun/nio/ch/SocketChannelImpl:.read_[j];sun/nio/ch/FileDispatcherImpl:.read0_[j];read;system_call_fastpath_[k];sys_read_[k];vfs_read_[k];do_sync_read_[k];sock_aio_read_[k];sock_aio_read.part.13_[k];do_sock_read.isra.12_[k];inet_recvmsg_[k];tcp_recvmsg_[k];_raw_spin_lock_bh_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/socket/nio/NioSocketChannel:.doReadBytes_[j];sun/nio/ch/SocketChannelImpl:.read_[j];sun/nio/ch/FileDispatcherImpl:.read0_[j];read;system_call_fastpath_[k];sys_read_[k];vfs_read_[k];do_sync_read_[k];sock_aio_read_[k];sock_aio_read.part.13_[k];do_sock_read.isra.12_[k];inet_recvmsg_[k];tcp_recvmsg_[k];skb_copy_datagram_iovec_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/socket/nio/NioSocketChannel:.doReadBytes_[j];sun/nio/ch/SocketChannelImpl:.read_[j];sun/nio/ch/FileDispatcherImpl:.read0_[j];read;system_call_fastpath_[k];sys_read_[k];vfs_read_[k];do_sync_read_[k];sock_aio_read_[k];sock_aio_read.part.13_[k];do_sock_read.isra.12_[k];inet_recvmsg_[k];tcp_recvmsg_[k];skb_copy_datagram_iovec_[k];copy_user_enhanced_fast_string_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/socket/nio/NioSocketChannel:.doReadBytes_[j];sun/nio/ch/SocketChannelImpl:.read_[j];sun/nio/ch/FileDispatcherImpl:.read0_[j];read;system_call_fastpath_[k];sys_read_[k];vfs_read_[k];do_sync_read_[k];sock_aio_read_[k];sock_aio_read.part.13_[k];do_sock_read.isra.12_[k];inet_recvmsg_[k];tcp_recvmsg_[k];tcp_cleanup_rbuf_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/socket/nio/NioSocketChannel:.doReadBytes_[j];sun/nio/ch/SocketChannelImpl:.read_[j];sun/nio/ch/FileDispatcherImpl:.read0_[j];read;system_call_fastpath_[k];sys_read_[k];vfs_read_[k];do_sync_read_[k];sock_aio_read_[k];sock_aio_read.part.13_[k];do_sock_read.isra.12_[k];inet_recvmsg_[k];tcp_recvmsg_[k];tcp_cleanup_rbuf_[k];__tcp_select_window_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/channel/socket/nio/NioSocketChannel:.doReadBytes_[j];sun/nio/ch/SocketChannelImpl:.read_[j];sun/nio/ch/FileDispatcherImpl:.read0_[j];read;system_call_fastpath_[k];sys_read_[k];vfs_read_[k];rw_verify_area_[k] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read_[j];io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete_[j] 1
|
||||
java;start_thread;java_start;JavaThread::run;JavaThread::thread_main_inner;thread_entry;JavaCalls::call_virtual;JavaCalls::call_virtual;JavaCalls::call_helper;call_stub_[j];Interpreter_[j];Interpreter_[j];io/netty/channel/nio/NioEventLoop:.run_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeys_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized_[j];io/netty/channel/nio/NioEventLoop:.processSelectedKey_[j];io/netty/channel/socket/nio/NioSocketChannel:.doReadBytes_[j] 1
|
||||
java;start_thread;java_start;VMThread::run;VMThread::loop;VMThread::evaluate_operation;VM_Operation::evaluate;VM_ParallelGCFailedAllocation::doit;ParallelScavengeHeap::failed_mem_allocate;PSScavenge::invoke;PSScavenge::invoke_no_policy;PSIsAliveClosure::do_object_b 1
|
||||
java;start_thread;java_start;VMThread::run;VMThread::loop;VMThread::evaluate_operation;VM_Operation::evaluate;VM_ParallelGCFailedAllocation::doit;ParallelScavengeHeap::failed_mem_allocate;PSScavenge::invoke;PSScavenge::invoke_no_policy;StringTable::unlink_or_oops_do 2
|
||||
java;start_thread;java_start;VMThread::run;VMThread::loop;VMThread::evaluate_operation;VM_Operation::evaluate;VM_ParallelGCFailedAllocation::doit;ParallelScavengeHeap::failed_mem_allocate;PSScavenge::invoke;PSScavenge::invoke_no_policy;pthread_cond_signal@@GLIBC_2.3.2;system_call_fastpath_[k];sys_futex_[k];do_futex_[k];futex_wake_op_[k] 1
|
||||
java;write;check_events_[k];hypercall_page_[k] 3
|
||||
@@ -1,3 +0,0 @@
|
||||
speedscope@1.5.3
|
||||
Thu Jan 16 00:10:56 PST 2020
|
||||
707462e9cffec2bda49587c39d621ba89d1b51cb
|
||||
@@ -1 +0,0 @@
|
||||
a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:"";content:none}table{border-collapse:collapse;border-spacing:0}html{overflow:hidden}body,html{height:100%}body{overflow:auto}
|
||||
File diff suppressed because one or more lines are too long
@@ -1,21 +0,0 @@
|
||||
import { CssBaseline } from "@material-ui/core";
|
||||
import React from "react";
|
||||
import { Provider } from "react-redux";
|
||||
import { BrowserRouter, Route } from "react-router-dom";
|
||||
import Dashboard from "./pages/dashboard/Dashboard";
|
||||
import { store } from "./store";
|
||||
|
||||
class App extends React.Component {
|
||||
render() {
|
||||
return (
|
||||
<Provider store={store}>
|
||||
<BrowserRouter>
|
||||
<CssBaseline />
|
||||
<Route component={Dashboard} exact path="/" />
|
||||
</BrowserRouter>
|
||||
</Provider>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default App;
|
||||
@@ -1,421 +0,0 @@
|
||||
const base =
|
||||
process.env.NODE_ENV === "development"
|
||||
? "http://localhost:8265"
|
||||
: window.location.origin;
|
||||
|
||||
// TODO(mitchellstern): Add JSON schema validation for the responses.
|
||||
const get = async <T>(path: string, params: { [key: string]: any }) => {
|
||||
const url = new URL(path, base);
|
||||
for (const [key, value] of Object.entries(params)) {
|
||||
url.searchParams.set(key, value);
|
||||
}
|
||||
|
||||
const response = await fetch(url.toString());
|
||||
const json = await response.json();
|
||||
|
||||
const { result, error } = json;
|
||||
|
||||
if (error !== null) {
|
||||
throw Error(error);
|
||||
}
|
||||
|
||||
return result as T;
|
||||
};
|
||||
|
||||
const post = async <T>(path: string, params: { [key: string]: any }) => {
|
||||
const requestOptions = {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify(params),
|
||||
};
|
||||
|
||||
const url = new URL(path, base);
|
||||
|
||||
const response = await fetch(url.toString(), requestOptions);
|
||||
const json = await response.json();
|
||||
|
||||
const { result, error } = json;
|
||||
|
||||
if (error !== null) {
|
||||
throw Error(error);
|
||||
}
|
||||
|
||||
return result as T;
|
||||
};
|
||||
|
||||
export type RayConfigResponse = {
|
||||
min_workers: number;
|
||||
max_workers: number;
|
||||
initial_workers: number;
|
||||
autoscaling_mode: string;
|
||||
idle_timeout_minutes: number;
|
||||
head_type: string;
|
||||
worker_type: string;
|
||||
};
|
||||
|
||||
export const getRayConfig = () => get<RayConfigResponse>("/api/ray_config", {});
|
||||
|
||||
export type NodeInfoResponseWorker = {
|
||||
pid: number;
|
||||
create_time: number;
|
||||
cmdline: string[];
|
||||
cpu_percent: number;
|
||||
cpu_times: {
|
||||
system: number;
|
||||
children_system: number;
|
||||
user: number;
|
||||
children_user: number;
|
||||
};
|
||||
memory_info: {
|
||||
pageins: number;
|
||||
pfaults: number;
|
||||
vms: number;
|
||||
rss: number;
|
||||
};
|
||||
};
|
||||
|
||||
export type GPUProcessStats = {
|
||||
// Sub stat of GPU stats, this type represents the GPU
|
||||
// utilization of a single process of a single GPU.
|
||||
username: string;
|
||||
command: string;
|
||||
gpu_memory_usage: number;
|
||||
pid: number;
|
||||
};
|
||||
|
||||
export type GPUStats = {
|
||||
// This represents stats fetched from a node about a single GPU
|
||||
uuid: string;
|
||||
name: string;
|
||||
temperature_gpu: number;
|
||||
fan_speed: number;
|
||||
utilization_gpu: number;
|
||||
power_draw: number;
|
||||
enforced_power_limit: number;
|
||||
memory_used: number;
|
||||
memory_total: number;
|
||||
processes: Array<GPUProcessStats>;
|
||||
};
|
||||
|
||||
export type NodeInfoResponse = {
|
||||
clients: Array<{
|
||||
now: number;
|
||||
hostname: string;
|
||||
ip: string;
|
||||
boot_time: number; // System boot time expressed in seconds since epoch
|
||||
cpu: number; // System-wide CPU utilization expressed as a percentage
|
||||
cpus: [number, number]; // Number of logical CPUs and physical CPUs
|
||||
gpus: Array<GPUStats>; // GPU stats fetched from node, 1 entry per GPU
|
||||
mem: [number, number, number]; // Total, available, and used percentage of memory
|
||||
disk: {
|
||||
[path: string]: {
|
||||
total: number;
|
||||
free: number;
|
||||
used: number;
|
||||
percent: number;
|
||||
};
|
||||
};
|
||||
load_avg: [[number, number, number], [number, number, number]];
|
||||
net: [number, number]; // Sent and received network traffic in bytes / second
|
||||
log_count?: { [pid: string]: number };
|
||||
error_count?: { [pid: string]: number };
|
||||
workers: Array<NodeInfoResponseWorker>;
|
||||
}>;
|
||||
};
|
||||
|
||||
export const getNodeInfo = () => get<NodeInfoResponse>("/api/node_info", {});
|
||||
|
||||
export type ResourceSlot = {
|
||||
slot: number;
|
||||
allocation: number;
|
||||
};
|
||||
|
||||
export type ResourceAllocations = {
|
||||
resourceSlots: ResourceSlot[];
|
||||
};
|
||||
|
||||
export type RayletCoreWorkerStats = {
|
||||
usedResources: {
|
||||
[key: string]: ResourceAllocations;
|
||||
};
|
||||
};
|
||||
|
||||
export type RayletWorkerStats = {
|
||||
pid: number;
|
||||
isDriver?: boolean;
|
||||
coreWorkerStats: RayletCoreWorkerStats;
|
||||
};
|
||||
|
||||
export enum ActorState {
|
||||
// These two are virtual states that we air because there is
|
||||
// an existing task to create an actor
|
||||
Infeasible = -2, // Actor task is waiting on resources (e.g. RAM, CPUs or GPUs) that the cluster does not have
|
||||
PendingResources = -1, // Actor task is waiting on resources the cluster has but are in-use
|
||||
// The rest below are "official" GCS actor states
|
||||
DependenciesUnready = 0, // Actor is pending on an argument to be ready
|
||||
PendingCreation = 1, // Actor creation is running
|
||||
Alive = 2, // Actor is alive and handling tasks
|
||||
Restarting = 3, // Actor died and is being restarted
|
||||
Dead = 4, // Actor died and is not being restarted
|
||||
}
|
||||
|
||||
export type ActorInfo = FullActorInfo | ActorTaskInfo;
|
||||
|
||||
export type FullActorInfo = {
|
||||
actorId: string;
|
||||
actorTitle: string;
|
||||
averageTaskExecutionSpeed: number;
|
||||
children?: ActorInfo[];
|
||||
ipAddress: string;
|
||||
jobId: string;
|
||||
nodeId: string;
|
||||
numExecutedTasks: number;
|
||||
numLocalObjects: number;
|
||||
numObjectRefsInScope: number;
|
||||
pid: number;
|
||||
port: number;
|
||||
state:
|
||||
| ActorState.Alive
|
||||
| ActorState.Restarting
|
||||
| ActorState.Dead
|
||||
| ActorState.DependenciesUnready
|
||||
| ActorState.PendingCreation;
|
||||
taskQueueLength: number;
|
||||
timestamp: number;
|
||||
usedObjectStoreMemory: number;
|
||||
usedResources: { [key: string]: ResourceAllocations };
|
||||
currentTaskDesc?: string;
|
||||
numPendingTasks?: number;
|
||||
webuiDisplay?: Record<string, string>;
|
||||
};
|
||||
|
||||
export type ActorTaskInfo = {
|
||||
actorId?: string;
|
||||
actorTitle?: string;
|
||||
requiredResources?: { [key: string]: number };
|
||||
state: ActorState.Infeasible | ActorState.PendingResources;
|
||||
};
|
||||
|
||||
// eslint-disable-next-line
|
||||
export function isFullActorInfo(
|
||||
actorInfo: ActorInfo,
|
||||
): actorInfo is FullActorInfo {
|
||||
// Lint disabled because arrow functions don't play well with type guards.
|
||||
// This function is used to determine what kind of information we have about
|
||||
// a given actor in a response based on its state.
|
||||
return (
|
||||
actorInfo.state !== ActorState.Infeasible &&
|
||||
actorInfo.state !== ActorState.PendingResources
|
||||
);
|
||||
}
|
||||
|
||||
export type ActorGroupSummary = {
|
||||
stateToCount: { [state in ActorState]: number };
|
||||
avgLifetime: number;
|
||||
maxLifetime: number;
|
||||
numExecutedTasks: number;
|
||||
};
|
||||
|
||||
export type ActorGroup = {
|
||||
entries: ActorInfo[];
|
||||
summary: ActorGroupSummary;
|
||||
};
|
||||
|
||||
export type RayletInfoResponse = {
|
||||
nodes: {
|
||||
[ip: string]: {
|
||||
extraInfo?: string;
|
||||
workersStats: Array<RayletWorkerStats>;
|
||||
};
|
||||
};
|
||||
actorGroups: {
|
||||
[groupKey: string]: ActorGroup;
|
||||
};
|
||||
plasmaStats: {
|
||||
[ip: string]: PlasmaStats;
|
||||
};
|
||||
};
|
||||
|
||||
export type PlasmaStats = {
|
||||
object_store_num_local_objects: number;
|
||||
object_store_available_memory: number;
|
||||
object_store_used_memory: number;
|
||||
};
|
||||
|
||||
export const getRayletInfo = () =>
|
||||
get<RayletInfoResponse>("/api/raylet_info", {});
|
||||
|
||||
export type ErrorsResponse = {
|
||||
[pid: string]: Array<{
|
||||
message: string;
|
||||
timestamp: number;
|
||||
type: string;
|
||||
}>;
|
||||
};
|
||||
|
||||
export const getErrors = (hostname: string, pid: number | null) =>
|
||||
get<ErrorsResponse>("/api/errors", {
|
||||
hostname,
|
||||
pid: pid === null ? "" : pid,
|
||||
});
|
||||
|
||||
export type LogsResponse = {
|
||||
[pid: string]: string[];
|
||||
};
|
||||
|
||||
export const getLogs = (hostname: string, pid: number | null) =>
|
||||
get<LogsResponse>("/api/logs", {
|
||||
hostname,
|
||||
pid: pid === null ? "" : pid,
|
||||
});
|
||||
|
||||
export type LaunchProfilingResponse = string;
|
||||
|
||||
export const launchProfiling = (
|
||||
nodeId: string,
|
||||
pid: number,
|
||||
duration: number,
|
||||
) =>
|
||||
get<LaunchProfilingResponse>("/api/launch_profiling", {
|
||||
node_id: nodeId,
|
||||
pid: pid,
|
||||
duration: duration,
|
||||
});
|
||||
|
||||
export type CheckProfilingStatusResponse =
|
||||
| { status: "pending" }
|
||||
| { status: "finished" }
|
||||
| { status: "error"; error: string };
|
||||
|
||||
export const checkProfilingStatus = (profilingId: string) =>
|
||||
get<CheckProfilingStatusResponse>("/api/check_profiling_status", {
|
||||
profiling_id: profilingId,
|
||||
});
|
||||
|
||||
export const getProfilingResultURL = (profilingId: string) =>
|
||||
`${base}/speedscope/index.html#profileURL=${encodeURIComponent(
|
||||
`${base}/api/get_profiling_info?profiling_id=${profilingId}`,
|
||||
)}`;
|
||||
|
||||
export const launchKillActor = (
|
||||
actorId: string,
|
||||
actorIpAddress: string,
|
||||
actorPort: number,
|
||||
) =>
|
||||
get<object>("/api/kill_actor", {
|
||||
// make sure object is okay
|
||||
actor_id: actorId,
|
||||
ip_address: actorIpAddress,
|
||||
port: actorPort,
|
||||
});
|
||||
|
||||
export type TuneTrial = {
|
||||
date: string;
|
||||
episodes_total: string;
|
||||
experiment_id: string;
|
||||
experiment_tag: string;
|
||||
hostname: string;
|
||||
iterations_since_restore: number;
|
||||
logdir: string;
|
||||
node_ip: string;
|
||||
pid: number;
|
||||
time_since_restore: number;
|
||||
time_this_iter_s: number;
|
||||
time_total_s: number;
|
||||
timestamp: number;
|
||||
timesteps_since_restore: number;
|
||||
timesteps_total: number;
|
||||
training_iteration: number;
|
||||
start_time: string;
|
||||
status: string;
|
||||
trial_id: string | number;
|
||||
job_id: string;
|
||||
params: { [key: string]: string | number };
|
||||
metrics: { [key: string]: string | number };
|
||||
error: string;
|
||||
};
|
||||
|
||||
export type TuneError = {
|
||||
text: string;
|
||||
job_id: string;
|
||||
trial_id: string;
|
||||
};
|
||||
|
||||
export type TuneJobResponse = {
|
||||
trial_records: { [key: string]: TuneTrial };
|
||||
errors: { [key: string]: TuneError };
|
||||
tensorboard: {
|
||||
tensorboard_current: boolean;
|
||||
tensorboard_enabled: boolean;
|
||||
};
|
||||
};
|
||||
|
||||
export const getTuneInfo = () => get<TuneJobResponse>("/api/tune_info", {});
|
||||
|
||||
export type TuneAvailabilityResponse = {
|
||||
available: boolean;
|
||||
trials_available: boolean;
|
||||
};
|
||||
|
||||
export const getTuneAvailability = () =>
|
||||
get<TuneAvailabilityResponse>("/api/tune_availability", {});
|
||||
|
||||
export type TuneSetExperimentReponse = {
|
||||
experiment: string;
|
||||
};
|
||||
|
||||
export const setTuneExperiment = (experiment: string) =>
|
||||
post<TuneSetExperimentReponse>("/api/set_tune_experiment", {
|
||||
experiment: experiment,
|
||||
});
|
||||
|
||||
export const enableTuneTensorBoard = () =>
|
||||
post<{}>("/api/enable_tune_tensorboard", {});
|
||||
|
||||
export type MemoryTableSummary = {
|
||||
total_actor_handles: number;
|
||||
total_captured_in_objects: number;
|
||||
total_local_ref_count: number;
|
||||
// The measurement is B.
|
||||
total_object_size: number;
|
||||
total_pinned_in_memory: number;
|
||||
total_used_by_pending_task: number;
|
||||
};
|
||||
|
||||
export type MemoryTableEntry = {
|
||||
node_ip_address: string;
|
||||
pid: number;
|
||||
type: string;
|
||||
object_ref: string;
|
||||
object_size: number;
|
||||
reference_type: string;
|
||||
call_site: string;
|
||||
};
|
||||
|
||||
export type MemoryTableGroups = {
|
||||
[groupKey: string]: MemoryTableGroup;
|
||||
};
|
||||
|
||||
export type MemoryTableGroup = {
|
||||
entries: MemoryTableEntry[];
|
||||
summary: MemoryTableSummary;
|
||||
};
|
||||
|
||||
export type MemoryTableResponse = {
|
||||
group: MemoryTableGroups;
|
||||
summary: MemoryTableSummary;
|
||||
};
|
||||
|
||||
// This doesn't return anything.
|
||||
export type StopMemoryTableResponse = {};
|
||||
|
||||
export type MemoryGroupByKey = "node" | "stack_trace" | "";
|
||||
|
||||
export const getMemoryTable = async (groupByKey: MemoryGroupByKey) => {
|
||||
return get<MemoryTableResponse>("/api/memory_table", {
|
||||
group_by: groupByKey,
|
||||
});
|
||||
};
|
||||
|
||||
export const stopMemoryTableCollection = () =>
|
||||
get<StopMemoryTableResponse>("/api/stop_memory_table", {});
|
||||
@@ -1,5 +0,0 @@
|
||||
import { styled, Typography } from "@material-ui/core";
|
||||
|
||||
export const RightPaddedTypography = styled(Typography)(({ theme }) => ({
|
||||
paddingRight: theme.spacing(1),
|
||||
}));
|
||||
@@ -1,64 +0,0 @@
|
||||
import {
|
||||
createStyles,
|
||||
Dialog,
|
||||
IconButton,
|
||||
Theme,
|
||||
Typography,
|
||||
WithStyles,
|
||||
withStyles,
|
||||
} from "@material-ui/core";
|
||||
import CloseIcon from "@material-ui/icons/Close";
|
||||
import React from "react";
|
||||
|
||||
const styles = (theme: Theme) =>
|
||||
createStyles({
|
||||
paper: {
|
||||
padding: theme.spacing(3),
|
||||
},
|
||||
closeButton: {
|
||||
position: "absolute",
|
||||
right: theme.spacing(1.5),
|
||||
top: theme.spacing(1.5),
|
||||
zIndex: 1,
|
||||
},
|
||||
title: {
|
||||
borderBottomColor: theme.palette.divider,
|
||||
borderBottomStyle: "solid",
|
||||
borderBottomWidth: 1,
|
||||
fontSize: "1.5rem",
|
||||
lineHeight: 1,
|
||||
marginBottom: theme.spacing(3),
|
||||
paddingBottom: theme.spacing(3),
|
||||
},
|
||||
});
|
||||
|
||||
type Props = {
|
||||
handleClose: () => void;
|
||||
title: string;
|
||||
};
|
||||
|
||||
class DialogWithTitle extends React.Component<
|
||||
Props & WithStyles<typeof styles>
|
||||
> {
|
||||
render() {
|
||||
const { classes, handleClose, title } = this.props;
|
||||
return (
|
||||
<Dialog
|
||||
classes={{ paper: classes.paper }}
|
||||
fullWidth
|
||||
maxWidth="md"
|
||||
onClose={handleClose}
|
||||
open
|
||||
scroll="body"
|
||||
>
|
||||
<IconButton className={classes.closeButton} onClick={handleClose}>
|
||||
<CloseIcon />
|
||||
</IconButton>
|
||||
<Typography className={classes.title}>{title}</Typography>
|
||||
{this.props.children}
|
||||
</Dialog>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default withStyles(styles)(DialogWithTitle);
|
||||
@@ -1,19 +0,0 @@
|
||||
import ExpandLessIcon from "@material-ui/icons/ExpandLess";
|
||||
import ExpandMoreIcon from "@material-ui/icons/ExpandMore";
|
||||
import React from "react";
|
||||
|
||||
type MinimizerProps = {
|
||||
onClick: React.MouseEventHandler;
|
||||
};
|
||||
|
||||
type ExpanderProps = {
|
||||
onClick: React.MouseEventHandler;
|
||||
};
|
||||
|
||||
export const Minimizer: React.FC<MinimizerProps> = ({ onClick }) => (
|
||||
<ExpandLessIcon onClick={onClick} />
|
||||
);
|
||||
|
||||
export const Expander: React.FC<ExpanderProps> = ({ onClick }) => (
|
||||
<ExpandMoreIcon onClick={onClick} />
|
||||
);
|
||||
@@ -1,39 +0,0 @@
|
||||
import { Box, Grid, makeStyles, Tooltip } from "@material-ui/core";
|
||||
import React, { ReactChild } from "react";
|
||||
|
||||
type LabeledDatumProps = {
|
||||
label: ReactChild;
|
||||
datum: any;
|
||||
tooltip?: string;
|
||||
};
|
||||
|
||||
const useLabeledDatumStyles = makeStyles({
|
||||
tooltipLabel: {
|
||||
textDecorationLine: "underline",
|
||||
textDecorationColor: "#a6c3e3",
|
||||
textDecorationThickness: "1px",
|
||||
textDecorationStyle: "dotted",
|
||||
cursor: "help",
|
||||
},
|
||||
});
|
||||
|
||||
const LabeledDatum: React.FC<LabeledDatumProps> = ({
|
||||
label,
|
||||
datum,
|
||||
tooltip,
|
||||
}) => {
|
||||
const classes = useLabeledDatumStyles();
|
||||
const innerHtml = (
|
||||
<Grid container item xs={6}>
|
||||
<Grid item xs={6}>
|
||||
<Box className={tooltip && classes.tooltipLabel}>{label}</Box>
|
||||
</Grid>
|
||||
<Grid item xs={6}>
|
||||
<span>{datum}</span>
|
||||
</Grid>
|
||||
</Grid>
|
||||
);
|
||||
return tooltip ? <Tooltip title={tooltip}>{innerHtml}</Tooltip> : innerHtml;
|
||||
};
|
||||
|
||||
export default LabeledDatum;
|
||||
@@ -1,72 +0,0 @@
|
||||
import {
|
||||
createStyles,
|
||||
Table,
|
||||
TableBody,
|
||||
TableCell,
|
||||
TableRow,
|
||||
Theme,
|
||||
withStyles,
|
||||
WithStyles,
|
||||
} from "@material-ui/core";
|
||||
import classNames from "classnames";
|
||||
import React from "react";
|
||||
|
||||
const styles = (theme: Theme) =>
|
||||
createStyles({
|
||||
root: {
|
||||
overflowX: "auto",
|
||||
},
|
||||
cell: {
|
||||
borderWidth: 0,
|
||||
fontFamily: "SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace",
|
||||
padding: 0,
|
||||
"&:last-child": {
|
||||
paddingRight: 0,
|
||||
},
|
||||
},
|
||||
lineNumber: {
|
||||
color: theme.palette.text.secondary,
|
||||
paddingRight: theme.spacing(2),
|
||||
textAlign: "right",
|
||||
verticalAlign: "top",
|
||||
width: "1%",
|
||||
// Use a ::before pseudo-element for the line number so that it won't
|
||||
// interact with user selections or searching.
|
||||
"&::before": {
|
||||
content: "attr(data-line-number)",
|
||||
},
|
||||
},
|
||||
line: {
|
||||
textAlign: "left",
|
||||
whiteSpace: "pre-wrap",
|
||||
},
|
||||
});
|
||||
|
||||
type Props = {
|
||||
lines: string[];
|
||||
};
|
||||
|
||||
class NumberedLines extends React.Component<Props & WithStyles<typeof styles>> {
|
||||
render() {
|
||||
const { classes, lines } = this.props;
|
||||
return (
|
||||
<Table>
|
||||
<TableBody>
|
||||
{lines.map((line, index) => (
|
||||
<TableRow key={index}>
|
||||
<TableCell
|
||||
className={classNames(classes.cell, classes.lineNumber)}
|
||||
data-line-number={index + 1}
|
||||
/>
|
||||
<TableCell className={classNames(classes.cell, classes.line)}>
|
||||
{line}
|
||||
</TableCell>
|
||||
</TableRow>
|
||||
))}
|
||||
</TableBody>
|
||||
</Table>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default withStyles(styles)(NumberedLines);
|
||||
@@ -1,94 +0,0 @@
|
||||
import {
|
||||
createStyles,
|
||||
makeStyles,
|
||||
TableHead,
|
||||
TableRow,
|
||||
TableSortLabel,
|
||||
Theme,
|
||||
} from "@material-ui/core";
|
||||
import React from "react";
|
||||
import { StyledTableCell } from "./TableCell";
|
||||
import { Order } from "./tableUtils";
|
||||
|
||||
const useSortableTableHeadStyles = makeStyles((theme: Theme) =>
|
||||
createStyles({
|
||||
visuallyHidden: {
|
||||
border: 0,
|
||||
clip: "rect(0 0 0 0)",
|
||||
height: 1,
|
||||
margin: -1,
|
||||
overflow: "hidden",
|
||||
padding: 0,
|
||||
position: "absolute",
|
||||
top: 20,
|
||||
width: 1,
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
||||
export type HeaderInfo<T> = {
|
||||
sortable: boolean;
|
||||
id: T;
|
||||
label: string;
|
||||
numeric: boolean;
|
||||
};
|
||||
|
||||
type SortableTableHeadProps<T> = {
|
||||
onRequestSort: (event: React.MouseEvent<unknown>, id: T) => void;
|
||||
order: Order;
|
||||
orderBy: T | null;
|
||||
headerInfo: HeaderInfo<T>[];
|
||||
firstColumnEmpty: boolean;
|
||||
};
|
||||
|
||||
const SortableTableHead = <T,>(props: SortableTableHeadProps<T>) => {
|
||||
const { order, orderBy, onRequestSort, headerInfo, firstColumnEmpty } = props;
|
||||
const classes = useSortableTableHeadStyles();
|
||||
const createSortHandler = (id: T) => (event: React.MouseEvent<unknown>) => {
|
||||
onRequestSort(event, id);
|
||||
};
|
||||
return (
|
||||
<TableHead>
|
||||
<TableRow>
|
||||
{firstColumnEmpty && <StyledTableCell />}
|
||||
{headerInfo.map((headerInfo) => {
|
||||
if (headerInfo.sortable) {
|
||||
return (
|
||||
<StyledTableCell
|
||||
key={headerInfo.label}
|
||||
align={headerInfo.numeric ? "right" : "left"}
|
||||
sortDirection={orderBy === headerInfo.id ? order : false}
|
||||
>
|
||||
<TableSortLabel
|
||||
active={orderBy === headerInfo.id}
|
||||
direction={orderBy === headerInfo.id ? order : "asc"}
|
||||
onClick={createSortHandler(headerInfo.id)}
|
||||
>
|
||||
{headerInfo.label}
|
||||
{orderBy === headerInfo.id ? (
|
||||
<span className={classes.visuallyHidden}>
|
||||
{order === "desc"
|
||||
? "sorted descending"
|
||||
: "sorted ascending"}
|
||||
</span>
|
||||
) : null}
|
||||
</TableSortLabel>
|
||||
</StyledTableCell>
|
||||
);
|
||||
} else {
|
||||
return (
|
||||
<StyledTableCell
|
||||
key={headerInfo.label}
|
||||
align={headerInfo.numeric ? "right" : "left"}
|
||||
>
|
||||
{headerInfo.label}
|
||||
</StyledTableCell>
|
||||
);
|
||||
}
|
||||
})}
|
||||
</TableRow>
|
||||
</TableHead>
|
||||
);
|
||||
};
|
||||
|
||||
export default SortableTableHead;
|
||||
@@ -1,24 +0,0 @@
|
||||
import { createStyles, Theme, withStyles, WithStyles } from "@material-ui/core";
|
||||
import React, { HTMLAttributes } from "react";
|
||||
|
||||
const styles = (theme: Theme) =>
|
||||
createStyles({
|
||||
button: {
|
||||
color: theme.palette.primary.main,
|
||||
"&:hover": {
|
||||
cursor: "pointer",
|
||||
textDecoration: "underline",
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
class SpanButton extends React.Component<
|
||||
HTMLAttributes<HTMLSpanElement> & WithStyles<typeof styles>
|
||||
> {
|
||||
render() {
|
||||
const { classes, ...otherProps } = this.props;
|
||||
return <span className={classes.button} {...otherProps} />;
|
||||
}
|
||||
}
|
||||
|
||||
export default withStyles(styles)(SpanButton);
|
||||
@@ -1,13 +0,0 @@
|
||||
import { TableCell } from "@material-ui/core";
|
||||
import { styled } from "@material-ui/core/styles";
|
||||
|
||||
export const StyledTableCell = styled(TableCell)(({ theme }) => ({
|
||||
padding: theme.spacing(1),
|
||||
textAlign: "center",
|
||||
}));
|
||||
|
||||
export const ExpandableStyledTableCell = styled(TableCell)(({ theme }) => ({
|
||||
padding: theme.spacing(1),
|
||||
textAlign: "center",
|
||||
cursor: "pointer",
|
||||
}));
|
||||
@@ -1,68 +0,0 @@
|
||||
import { createStyles, makeStyles, Theme, Typography } from "@material-ui/core";
|
||||
import React from "react";
|
||||
|
||||
const blend = (
|
||||
[r1, g1, b1]: number[],
|
||||
[r2, g2, b2]: number[],
|
||||
ratio: number,
|
||||
) => [
|
||||
r1 * (1 - ratio) + r2 * ratio,
|
||||
g1 * (1 - ratio) + g2 * ratio,
|
||||
b1 * (1 - ratio) + b2 * ratio,
|
||||
];
|
||||
|
||||
const useUsageBarStyles = makeStyles((theme: Theme) =>
|
||||
createStyles({
|
||||
root: {
|
||||
borderColor: theme.palette.divider,
|
||||
borderStyle: "solid",
|
||||
borderWidth: 1,
|
||||
display: "flex",
|
||||
flexGrow: 1,
|
||||
},
|
||||
inner: {
|
||||
paddingLeft: theme.spacing(1),
|
||||
paddingRight: theme.spacing(1),
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
||||
type UsageBarProps = {
|
||||
percent: number;
|
||||
text: string;
|
||||
};
|
||||
|
||||
const UsageBar: React.FC<UsageBarProps> = ({ percent, text }) => {
|
||||
const classes = useUsageBarStyles();
|
||||
const safePercent = Math.max(Math.min(percent, 100), 0);
|
||||
const minColor = [0, 255, 0];
|
||||
const maxColor = [255, 0, 0];
|
||||
|
||||
const leftColor = minColor;
|
||||
const rightColor = blend(minColor, maxColor, safePercent / 100);
|
||||
const alpha = 0.2;
|
||||
|
||||
const gradient = `
|
||||
linear-gradient(
|
||||
to right,
|
||||
rgba(${leftColor.join(",")}, ${alpha}) 0%,
|
||||
rgba(${rightColor.join(",")}, ${alpha}) ${safePercent}%,
|
||||
transparent ${safePercent}%
|
||||
)
|
||||
`;
|
||||
|
||||
// Use a nested `span` here because the right border is affected by the
|
||||
// gradient background otherwise.
|
||||
return (
|
||||
<span className={classes.root}>
|
||||
<span
|
||||
className={classes.inner}
|
||||
style={{ background: gradient, flexGrow: 1 }}
|
||||
>
|
||||
<Typography align="center">{text}</Typography>
|
||||
</span>
|
||||
</span>
|
||||
);
|
||||
};
|
||||
|
||||
export default UsageBar;
|
||||
@@ -1,59 +0,0 @@
|
||||
export const formatByteAmount = (
|
||||
amount: number,
|
||||
unit: "mebibyte" | "gibibyte",
|
||||
) =>
|
||||
`${(
|
||||
amount / (unit === "mebibyte" ? Math.pow(1024, 2) : Math.pow(1024, 3))
|
||||
).toFixed(1)} ${unit === "mebibyte" ? "MiB" : "GiB"}`;
|
||||
|
||||
export const formatUsage = (
|
||||
used_b: number,
|
||||
total_b: number,
|
||||
unit: "mebibyte" | "gibibyte",
|
||||
includePercentage: boolean,
|
||||
) => {
|
||||
const usedFormatted = formatByteAmount(used_b, unit);
|
||||
const totalFormatted = formatByteAmount(total_b, unit);
|
||||
const percent = (100 * used_b) / total_b;
|
||||
const ratioStr = `${usedFormatted} / ${totalFormatted}`;
|
||||
if (includePercentage) {
|
||||
return `${ratioStr} (${percent.toFixed(0)}%)`;
|
||||
}
|
||||
return ratioStr;
|
||||
};
|
||||
|
||||
// Formats, e.g. 400 and 6000 as "400 MiB / 6000 MiB (6.7%)"
|
||||
export const MiBRatio = (used: number, total: number) =>
|
||||
`${used} MiB / ${total} MiB (${(100 * (used / total)).toFixed(1)}%)`;
|
||||
|
||||
export const MiBRatioNoPercent = (used: number, total: number) =>
|
||||
`${used} MiB / ${total} MiB`;
|
||||
|
||||
export const formatDuration = (durationInSeconds: number) => {
|
||||
const durationSeconds = Math.floor(durationInSeconds) % 60;
|
||||
const durationMinutes = Math.floor(durationInSeconds / 60) % 60;
|
||||
const durationHours = Math.floor(durationInSeconds / 60 / 60) % 24;
|
||||
const durationDays = Math.floor(durationInSeconds / 60 / 60 / 24);
|
||||
const pad = (value: number) => value.toString().padStart(2, "0");
|
||||
return [
|
||||
durationDays ? `${durationDays}d` : "",
|
||||
`${pad(durationHours)}h`,
|
||||
`${pad(durationMinutes)}m`,
|
||||
`${pad(durationSeconds)}s`,
|
||||
].join(" ");
|
||||
};
|
||||
|
||||
export const formatValue = (rawFloat: number) => {
|
||||
try {
|
||||
const decimals = rawFloat.toString().split(".")[1].length || 0;
|
||||
if (decimals <= 3) {
|
||||
return rawFloat.toString();
|
||||
} // Few decimals
|
||||
if (Math.abs(rawFloat.valueOf()) >= 1.0) {
|
||||
return rawFloat.toPrecision(5);
|
||||
} // Values >= 1
|
||||
return rawFloat.toExponential(); // Values in (-1; 1)
|
||||
} catch (e) {
|
||||
return rawFloat.toString();
|
||||
}
|
||||
};
|
||||
@@ -1,62 +0,0 @@
|
||||
export const descendingComparator = <T>(a: T, b: T, orderBy: keyof T) => {
|
||||
if (b[orderBy] < a[orderBy]) {
|
||||
return -1;
|
||||
}
|
||||
if (b[orderBy] > a[orderBy]) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
};
|
||||
|
||||
const descendingComparatorFnAccessor = <T>(
|
||||
a: T,
|
||||
b: T,
|
||||
orderByFn: Accessor<T>,
|
||||
) => {
|
||||
const aVal = orderByFn(a);
|
||||
const bVal = orderByFn(b);
|
||||
if (bVal < aVal) {
|
||||
return -1;
|
||||
}
|
||||
if (bVal > aVal) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
};
|
||||
|
||||
export type Order = "asc" | "desc";
|
||||
export type Comparator<T> = (a: T, b: T) => number;
|
||||
export type Accessor<T> = (a: T) => number | string;
|
||||
|
||||
export const getComparator = <Key extends keyof any>(
|
||||
order: Order,
|
||||
orderBy: Key,
|
||||
): ((
|
||||
a: { [key in Key]: number | string },
|
||||
b: { [key in Key]: number | string },
|
||||
) => number) => {
|
||||
return order === "desc"
|
||||
? (a, b) => descendingComparator(a, b, orderBy)
|
||||
: (a, b) => -descendingComparator(a, b, orderBy);
|
||||
};
|
||||
|
||||
export const getFnComparator = <T>(order: Order, orderByFn: Accessor<T>) => (
|
||||
a: T,
|
||||
b: T,
|
||||
): number => {
|
||||
return order === "desc"
|
||||
? descendingComparatorFnAccessor(a, b, orderByFn)
|
||||
: -descendingComparatorFnAccessor(a, b, orderByFn);
|
||||
};
|
||||
|
||||
export const stableSort = <T>(array: T[], comparator: Comparator<T>) => {
|
||||
const stabilizedThis = array.map((el, index) => [el, index] as [T, number]);
|
||||
stabilizedThis.sort((a, b) => {
|
||||
const order = comparator(a[0], b[0]);
|
||||
if (order !== 0) {
|
||||
return order;
|
||||
}
|
||||
return a[1] - b[1];
|
||||
});
|
||||
return stabilizedThis.map((el) => el[0]);
|
||||
};
|
||||
@@ -1,26 +0,0 @@
|
||||
export const getWeightedAverage = (
|
||||
input: {
|
||||
weight: number;
|
||||
value: number;
|
||||
}[],
|
||||
) => {
|
||||
if (input.length === 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
let totalWeightTimesValue = 0;
|
||||
let totalWeight = 0;
|
||||
for (const { weight, value } of input) {
|
||||
totalWeightTimesValue += weight * value;
|
||||
totalWeight += weight;
|
||||
}
|
||||
return totalWeightTimesValue / totalWeight;
|
||||
};
|
||||
|
||||
export const sum = (vals: number[]) => vals.reduce((acc, val) => acc + val, 0);
|
||||
|
||||
export const filterObj = (obj: Object, filterFn: any) =>
|
||||
Object.fromEntries(Object.entries(obj).filter(filterFn));
|
||||
|
||||
export const mapObj = (obj: Object, filterFn: any) =>
|
||||
Object.fromEntries(Object.entries(obj).map(filterFn));
|
||||
@@ -1,6 +0,0 @@
|
||||
import React from "react";
|
||||
import ReactDOM from "react-dom";
|
||||
import "typeface-roboto";
|
||||
import App from "./App";
|
||||
|
||||
ReactDOM.render(<App />, document.getElementById("root"));
|
||||
@@ -1,121 +0,0 @@
|
||||
import {
|
||||
createStyles,
|
||||
Tab,
|
||||
Tabs,
|
||||
Theme,
|
||||
Typography,
|
||||
WithStyles,
|
||||
withStyles,
|
||||
} from "@material-ui/core";
|
||||
import React from "react";
|
||||
import { connect } from "react-redux";
|
||||
import { getNodeInfo, getRayletInfo, getTuneAvailability } from "../../api";
|
||||
import { StoreState } from "../../store";
|
||||
import LastUpdated from "./LastUpdated";
|
||||
import LogicalView from "./logical-view/LogicalView";
|
||||
import MemoryInfo from "./memory/Memory";
|
||||
import NodeInfo from "./node-info/NodeInfo";
|
||||
import RayConfig from "./ray-config/RayConfig";
|
||||
import { dashboardActions } from "./state";
|
||||
import Tune from "./tune/Tune";
|
||||
|
||||
const styles = (theme: Theme) =>
|
||||
createStyles({
|
||||
root: {
|
||||
backgroundColor: theme.palette.background.paper,
|
||||
padding: theme.spacing(2),
|
||||
"& > :not(:first-child)": {
|
||||
marginTop: theme.spacing(4),
|
||||
},
|
||||
},
|
||||
tabs: {
|
||||
borderBottomColor: theme.palette.divider,
|
||||
borderBottomStyle: "solid",
|
||||
borderBottomWidth: 1,
|
||||
},
|
||||
});
|
||||
|
||||
const mapStateToProps = (state: StoreState) => ({
|
||||
tab: state.dashboard.tab,
|
||||
tuneAvailability: state.dashboard.tuneAvailability,
|
||||
});
|
||||
|
||||
const mapDispatchToProps = dashboardActions;
|
||||
|
||||
class Dashboard extends React.Component<
|
||||
WithStyles<typeof styles> &
|
||||
ReturnType<typeof mapStateToProps> &
|
||||
typeof mapDispatchToProps
|
||||
> {
|
||||
timeoutId = 0;
|
||||
tabs = [
|
||||
{ label: "Machine view", component: NodeInfo },
|
||||
{ label: "Logical view", component: LogicalView },
|
||||
{ label: "Memory", component: MemoryInfo },
|
||||
{ label: "Ray config", component: RayConfig },
|
||||
{ label: "Tune", component: Tune },
|
||||
];
|
||||
|
||||
refreshInfo = async () => {
|
||||
try {
|
||||
const [nodeInfo, rayletInfo, tuneAvailability] = await Promise.all([
|
||||
getNodeInfo(),
|
||||
getRayletInfo(),
|
||||
getTuneAvailability(),
|
||||
]);
|
||||
this.props.setNodeAndRayletInfo({ nodeInfo, rayletInfo });
|
||||
this.props.setTuneAvailability(tuneAvailability);
|
||||
this.props.setError(null);
|
||||
} catch (error) {
|
||||
this.props.setError(error.toString());
|
||||
} finally {
|
||||
this.timeoutId = window.setTimeout(this.refreshInfo, 1000);
|
||||
}
|
||||
};
|
||||
|
||||
async componentDidMount() {
|
||||
await this.refreshInfo();
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
clearTimeout(this.timeoutId);
|
||||
}
|
||||
|
||||
handleTabChange = async (event: React.ChangeEvent<{}>, value: number) =>
|
||||
this.props.setTab(value);
|
||||
|
||||
render() {
|
||||
const { classes, tab, tuneAvailability } = this.props;
|
||||
const tabs = this.tabs.slice();
|
||||
|
||||
// if Tune information is not available, remove Tune tab from the dashboard
|
||||
if (tuneAvailability === null || !tuneAvailability.available) {
|
||||
tabs.splice(4);
|
||||
}
|
||||
|
||||
const SelectedComponent = tabs[tab].component;
|
||||
return (
|
||||
<div className={classes.root}>
|
||||
<Typography variant="h5">Ray Dashboard</Typography>
|
||||
<Tabs
|
||||
className={classes.tabs}
|
||||
indicatorColor="primary"
|
||||
onChange={this.handleTabChange}
|
||||
textColor="primary"
|
||||
value={tab}
|
||||
>
|
||||
{tabs.map(({ label }) => (
|
||||
<Tab key={label} label={label} />
|
||||
))}
|
||||
</Tabs>
|
||||
<SelectedComponent />
|
||||
<LastUpdated />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default connect(
|
||||
mapStateToProps,
|
||||
mapDispatchToProps,
|
||||
)(withStyles(styles)(Dashboard));
|
||||
@@ -1,54 +0,0 @@
|
||||
import {
|
||||
createStyles,
|
||||
Theme,
|
||||
Typography,
|
||||
WithStyles,
|
||||
withStyles,
|
||||
} from "@material-ui/core";
|
||||
import React from "react";
|
||||
import { connect } from "react-redux";
|
||||
import { StoreState } from "../../store";
|
||||
|
||||
const styles = (theme: Theme) =>
|
||||
createStyles({
|
||||
root: {
|
||||
marginTop: theme.spacing(2),
|
||||
},
|
||||
lastUpdated: {
|
||||
color: theme.palette.text.secondary,
|
||||
fontSize: "0.8125rem",
|
||||
textAlign: "center",
|
||||
},
|
||||
error: {
|
||||
color: theme.palette.error.main,
|
||||
fontSize: "0.8125rem",
|
||||
textAlign: "center",
|
||||
},
|
||||
});
|
||||
|
||||
const mapStateToProps = (state: StoreState) => ({
|
||||
lastUpdatedAt: state.dashboard.lastUpdatedAt,
|
||||
error: state.dashboard.error,
|
||||
});
|
||||
|
||||
class LastUpdated extends React.Component<
|
||||
WithStyles<typeof styles> & ReturnType<typeof mapStateToProps>
|
||||
> {
|
||||
render() {
|
||||
const { classes, lastUpdatedAt, error } = this.props;
|
||||
return (
|
||||
<div className={classes.root}>
|
||||
{lastUpdatedAt !== null && (
|
||||
<Typography className={classes.lastUpdated}>
|
||||
Last updated: {new Date(lastUpdatedAt).toLocaleString()}
|
||||
</Typography>
|
||||
)}
|
||||
{error !== null && (
|
||||
<Typography className={classes.error}>{error}</Typography>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default connect(mapStateToProps)(withStyles(styles)(LastUpdated));
|
||||
@@ -1,291 +0,0 @@
|
||||
import { createStyles, makeStyles, Theme, Typography } from "@material-ui/core";
|
||||
import React, { useState } from "react";
|
||||
import {
|
||||
ActorInfo,
|
||||
ActorState,
|
||||
checkProfilingStatus,
|
||||
CheckProfilingStatusResponse,
|
||||
getProfilingResultURL,
|
||||
isFullActorInfo,
|
||||
launchKillActor,
|
||||
launchProfiling,
|
||||
} from "../../../api";
|
||||
import { sum } from "../../../common/util";
|
||||
import ActorDetailsPane from "./ActorDetailsPane";
|
||||
|
||||
const memoryDebuggingDocLink =
|
||||
"https://docs.ray.io/en/master/memory-management.html#debugging-using-ray-memory";
|
||||
|
||||
const useActorStyles = makeStyles((theme: Theme) =>
|
||||
createStyles({
|
||||
root: {
|
||||
borderColor: theme.palette.divider,
|
||||
borderStyle: "solid",
|
||||
borderWidth: 1,
|
||||
marginTop: theme.spacing(2),
|
||||
padding: theme.spacing(2),
|
||||
width: "100%",
|
||||
},
|
||||
title: {
|
||||
color: theme.palette.text.secondary,
|
||||
fontSize: "0.75rem",
|
||||
},
|
||||
action: {
|
||||
color: theme.palette.primary.main,
|
||||
textDecoration: "none",
|
||||
"&:hover": {
|
||||
cursor: "pointer",
|
||||
},
|
||||
},
|
||||
infeasible: {
|
||||
color: theme.palette.error.main,
|
||||
},
|
||||
pendingResources: {
|
||||
color: theme.palette.secondary.main,
|
||||
},
|
||||
|
||||
webuiDisplay: {
|
||||
fontSize: "0.875rem",
|
||||
},
|
||||
inlineHTML: {
|
||||
fontSize: "0.875rem",
|
||||
display: "inline",
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
||||
type ActorProps = {
|
||||
actor: ActorInfo;
|
||||
};
|
||||
|
||||
type profilingInfo = {
|
||||
[profilingId: string]: {
|
||||
startTime: number;
|
||||
latestResponse: CheckProfilingStatusResponse | null;
|
||||
};
|
||||
};
|
||||
|
||||
const Actor: React.FC<ActorProps> = ({ actor }) => {
|
||||
const [profiling, setProfiling] = useState<profilingInfo>({});
|
||||
const classes = useActorStyles();
|
||||
|
||||
const handleProfilingClick = (duration: number) => async () => {
|
||||
if (actor.state === ActorState.Alive) {
|
||||
const profilingId = await launchProfiling(
|
||||
actor.nodeId,
|
||||
actor.pid,
|
||||
duration,
|
||||
);
|
||||
setProfiling({
|
||||
...profiling,
|
||||
[profilingId]: { startTime: Date.now(), latestResponse: null },
|
||||
});
|
||||
const checkProfilingStatusLoop = async () => {
|
||||
const response = await checkProfilingStatus(profilingId);
|
||||
setProfiling({
|
||||
...profiling,
|
||||
[profilingId]: {
|
||||
...profiling[profilingId],
|
||||
latestResponse: response,
|
||||
},
|
||||
});
|
||||
if (response.status === "pending") {
|
||||
setTimeout(checkProfilingStatusLoop, 1000);
|
||||
}
|
||||
};
|
||||
await checkProfilingStatusLoop();
|
||||
}
|
||||
};
|
||||
|
||||
const killActor = () => {
|
||||
if (actor.state === ActorState.Alive) {
|
||||
launchKillActor(actor.actorId, actor.ipAddress, actor.port);
|
||||
}
|
||||
};
|
||||
|
||||
const information = isFullActorInfo(actor)
|
||||
? [
|
||||
{
|
||||
label: "Resources",
|
||||
value:
|
||||
Object.entries(actor.usedResources).length > 0 &&
|
||||
Object.entries(actor.usedResources)
|
||||
.sort((a, b) => a[0].localeCompare(b[0]))
|
||||
.map(
|
||||
([key, value]) =>
|
||||
`${sum(
|
||||
value.resourceSlots.map((slot) => slot.allocation),
|
||||
)} ${key}`,
|
||||
)
|
||||
.join(", "),
|
||||
},
|
||||
{
|
||||
label: "Number of pending tasks",
|
||||
value: actor.taskQueueLength.toLocaleString(),
|
||||
tooltip:
|
||||
"The number of tasks that are currently pending to execute on this actor. If this number " +
|
||||
"remains consistently high, it may indicate that this actor is a bottleneck in your application.",
|
||||
},
|
||||
{
|
||||
label: "Number of executed tasks",
|
||||
value: actor.numExecutedTasks.toLocaleString(),
|
||||
tooltip:
|
||||
"The number of tasks this actor has executed throughout its lifetimes.",
|
||||
},
|
||||
{
|
||||
label: "Number of ObjectRefs in scope",
|
||||
value: actor.numObjectRefsInScope.toLocaleString(),
|
||||
tooltip:
|
||||
"The number of ObjectRefs that this actor is keeping in scope via its internal state. " +
|
||||
"This does not imply that the objects are in active use or colocated on the node with the actor " +
|
||||
`currently. This can be useful for debugging memory leaks. See the docs at ${memoryDebuggingDocLink} ` +
|
||||
"for more information.",
|
||||
},
|
||||
{
|
||||
label: "Number of local objects",
|
||||
value: actor.numLocalObjects.toLocaleString(),
|
||||
tooltip:
|
||||
"The number of small objects that this actor has stored in its local in-process memory store. This can be useful for " +
|
||||
`debugging memory leaks. See the docs at ${memoryDebuggingDocLink} for more information`,
|
||||
},
|
||||
{
|
||||
label: "Object store memory used (MiB)",
|
||||
value: actor.usedObjectStoreMemory.toLocaleString(),
|
||||
tooltip:
|
||||
"The total amount of memory that this actor is occupying in the Ray object store. " +
|
||||
"If this number is increasing without bounds, you might have a memory leak. See " +
|
||||
`the docs at: ${memoryDebuggingDocLink} for more information.`,
|
||||
},
|
||||
]
|
||||
: [
|
||||
{
|
||||
label: "Actor ID",
|
||||
value: actor.actorId,
|
||||
tooltip: "",
|
||||
},
|
||||
{
|
||||
label: "Required resources",
|
||||
value:
|
||||
actor.requiredResources &&
|
||||
Object.entries(actor.requiredResources).length > 0 &&
|
||||
Object.entries(actor.requiredResources)
|
||||
.sort((a, b) => a[0].localeCompare(b[0]))
|
||||
.map(([key, value]) => `${value.toLocaleString()} ${key}`)
|
||||
.join(", "),
|
||||
tooltip: "",
|
||||
},
|
||||
];
|
||||
|
||||
// Construct the custom message from the actor.
|
||||
let actorCustomDisplay: JSX.Element[] = [];
|
||||
if (isFullActorInfo(actor) && actor.webuiDisplay) {
|
||||
actorCustomDisplay = Object.keys(actor.webuiDisplay)
|
||||
.sort()
|
||||
.map((key, _, __) => {
|
||||
// Construct the value from actor.
|
||||
// Please refer to worker.py::show_in_webui for schema.
|
||||
const valueEncoded = actor.webuiDisplay![key];
|
||||
const valueParsed = JSON.parse(valueEncoded);
|
||||
let valueRendered = valueParsed["message"];
|
||||
if (valueParsed["dtype"] === "html") {
|
||||
valueRendered = (
|
||||
<div
|
||||
className={classes.inlineHTML}
|
||||
dangerouslySetInnerHTML={{ __html: valueRendered }}
|
||||
></div>
|
||||
);
|
||||
}
|
||||
|
||||
if (key === "") {
|
||||
return (
|
||||
<Typography className={classes.webuiDisplay}>
|
||||
{valueRendered}
|
||||
</Typography>
|
||||
);
|
||||
} else {
|
||||
return (
|
||||
<Typography className={classes.webuiDisplay}>
|
||||
{key}: {valueRendered}
|
||||
</Typography>
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return (
|
||||
<div className={classes.root}>
|
||||
<Typography className={classes.title}>
|
||||
{isFullActorInfo(actor) ? (
|
||||
<React.Fragment>
|
||||
Actor {actor.actorId} (Profile for
|
||||
{[10, 30, 60].map((duration) => (
|
||||
<React.Fragment key={duration}>
|
||||
{" "}
|
||||
<span
|
||||
className={classes.action}
|
||||
onClick={handleProfilingClick(duration)}
|
||||
>
|
||||
{duration}s
|
||||
</span>
|
||||
</React.Fragment>
|
||||
))}
|
||||
){" "}
|
||||
{actor.state === ActorState.Alive && (
|
||||
<span className={classes.action} onClick={killActor}>
|
||||
Kill Actor
|
||||
</span>
|
||||
)}
|
||||
{Object.entries(profiling).map(
|
||||
([profilingId, { startTime, latestResponse }]) =>
|
||||
latestResponse !== null && (
|
||||
<React.Fragment key={profilingId}>
|
||||
(
|
||||
{latestResponse.status === "pending" ? (
|
||||
`Profiling for ${Math.round(
|
||||
(Date.now() - startTime) / 1000,
|
||||
)}s...`
|
||||
) : latestResponse.status === "finished" ? (
|
||||
<a
|
||||
className={classes.action}
|
||||
href={getProfilingResultURL(profilingId)}
|
||||
rel="noopener noreferrer"
|
||||
target="_blank"
|
||||
>
|
||||
Profiling result
|
||||
</a>
|
||||
) : latestResponse.status === "error" ? (
|
||||
`Profiling error: ${latestResponse.error.trim()}`
|
||||
) : undefined}
|
||||
){" "}
|
||||
</React.Fragment>
|
||||
),
|
||||
)}
|
||||
</React.Fragment>
|
||||
) : actor.state === ActorState.Infeasible ? (
|
||||
<span className={classes.infeasible}>
|
||||
{actor.actorTitle} cannot be created because the Ray cluster cannot
|
||||
satisfy its resource requirements.
|
||||
</span>
|
||||
) : (
|
||||
<span className={classes.pendingResources}>
|
||||
{actor.actorTitle} is pending until resources are available.
|
||||
</span>
|
||||
)}
|
||||
</Typography>
|
||||
<ActorDetailsPane
|
||||
actorDetails={information}
|
||||
actorTitle={actor.actorTitle ?? ""}
|
||||
actorState={actor.state}
|
||||
/>
|
||||
{isFullActorInfo(actor) && (
|
||||
<React.Fragment>
|
||||
{actorCustomDisplay.length > 0 && (
|
||||
<React.Fragment>{actorCustomDisplay}</React.Fragment>
|
||||
)}
|
||||
</React.Fragment>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default Actor;
|
||||
@@ -1,132 +0,0 @@
|
||||
import {
|
||||
Box,
|
||||
createStyles,
|
||||
Grid,
|
||||
makeStyles,
|
||||
Paper,
|
||||
styled,
|
||||
Typography,
|
||||
} from "@material-ui/core";
|
||||
import React, { useState } from "react";
|
||||
import { ActorGroup, ActorState } from "../../../api";
|
||||
import { Expander, Minimizer } from "../../../common/ExpandControls";
|
||||
import LabeledDatum from "../../../common/LabeledDatum";
|
||||
import Actor from "./Actor";
|
||||
import ActorStateRepr from "./ActorStateRepr";
|
||||
|
||||
const asSeconds = (n: number) => `${n}s`;
|
||||
const CenteredBox = styled(Box)({
|
||||
textAlign: "center",
|
||||
});
|
||||
|
||||
const useActorClassGroupStyles = makeStyles((theme) =>
|
||||
createStyles({
|
||||
container: {
|
||||
margin: theme.spacing(1),
|
||||
padding: theme.spacing(1),
|
||||
marginLeft: theme.spacing(2),
|
||||
},
|
||||
title: {
|
||||
margin: theme.spacing(1),
|
||||
},
|
||||
actorEntry: {
|
||||
width: "100%",
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
||||
type ActorClassGroupProps = {
|
||||
title: string;
|
||||
actorGroup: ActorGroup;
|
||||
};
|
||||
|
||||
const ActorClassGroup: React.FC<ActorClassGroupProps> = ({
|
||||
actorGroup,
|
||||
title,
|
||||
}) => {
|
||||
const classes = useActorClassGroupStyles();
|
||||
const [expanded, setExpanded] = useState(false);
|
||||
const toggleExpanded = () => setExpanded(!expanded);
|
||||
const entries = actorGroup.entries.map((actor, i) => (
|
||||
<Box
|
||||
component="div"
|
||||
className={classes.actorEntry}
|
||||
key={actor.actorId ?? i}
|
||||
>
|
||||
<Actor actor={actor} />
|
||||
</Box>
|
||||
));
|
||||
const { Alive, PendingResources, Infeasible } = ActorState;
|
||||
const summary = actorGroup.summary;
|
||||
return (
|
||||
<Paper className={classes.container}>
|
||||
<Box display="block" className={classes.title}>
|
||||
<Typography variant="h5">{title}</Typography>
|
||||
</Box>
|
||||
<Grid container className={classes.title}>
|
||||
<LabeledDatum
|
||||
label={
|
||||
<ActorStateRepr state={Alive} variant="body1" showTooltip={true} />
|
||||
}
|
||||
datum={
|
||||
Alive in summary.stateToCount ? summary.stateToCount[Alive] : 0
|
||||
}
|
||||
/>
|
||||
<LabeledDatum
|
||||
label={
|
||||
<ActorStateRepr
|
||||
state={Infeasible}
|
||||
variant="body1"
|
||||
showTooltip={true}
|
||||
/>
|
||||
}
|
||||
datum={
|
||||
Infeasible in summary.stateToCount
|
||||
? summary.stateToCount[Infeasible]
|
||||
: 0
|
||||
}
|
||||
/>
|
||||
<LabeledDatum
|
||||
label={
|
||||
<ActorStateRepr
|
||||
state={PendingResources}
|
||||
variant="body1"
|
||||
showTooltip={true}
|
||||
/>
|
||||
}
|
||||
datum={
|
||||
PendingResources in summary.stateToCount
|
||||
? summary.stateToCount[PendingResources]
|
||||
: 0
|
||||
}
|
||||
/>
|
||||
<LabeledDatum
|
||||
label={"Mean Lifetime"}
|
||||
datum={asSeconds(summary.avgLifetime)}
|
||||
/>
|
||||
<LabeledDatum
|
||||
label={"Max Lifetime"}
|
||||
datum={asSeconds(summary.maxLifetime)}
|
||||
/>
|
||||
<LabeledDatum
|
||||
label={"Executed Tasks"}
|
||||
datum={summary.numExecutedTasks}
|
||||
/>
|
||||
</Grid>
|
||||
{expanded ? (
|
||||
<React.Fragment>
|
||||
<Box>{entries}</Box>
|
||||
<CenteredBox>
|
||||
<Minimizer onClick={toggleExpanded} />
|
||||
</CenteredBox>
|
||||
</React.Fragment>
|
||||
) : (
|
||||
<CenteredBox>
|
||||
<Expander onClick={toggleExpanded} />
|
||||
</CenteredBox>
|
||||
)}
|
||||
</Paper>
|
||||
);
|
||||
};
|
||||
|
||||
export default ActorClassGroup;
|
||||
@@ -1,56 +0,0 @@
|
||||
import { Snackbar } from "@material-ui/core";
|
||||
import { Alert } from "@material-ui/lab";
|
||||
import React, { useState } from "react";
|
||||
import { ActorGroup, ActorState } from "../../../api";
|
||||
import { stableSort } from "../../../common/tableUtils";
|
||||
|
||||
import { sum } from "../../../common/util";
|
||||
import ActorClassGroup from "./ActorClassGroup";
|
||||
|
||||
type ActorClassGroupsProps = {
|
||||
actorGroups: { [groupKey: string]: ActorGroup };
|
||||
};
|
||||
|
||||
const ActorClassGroups: React.FC<ActorClassGroupsProps> = ({ actorGroups }) => {
|
||||
const numInfeasible = (group: ActorGroup) =>
|
||||
group.summary.stateToCount[ActorState.Infeasible] ?? 0;
|
||||
const totalInfeasible = sum(Object.values(actorGroups).map(numInfeasible));
|
||||
const [warningOpen, setWarningOpen] = useState(totalInfeasible > 0);
|
||||
const groupComparator = (
|
||||
[title1, group1]: [string, ActorGroup],
|
||||
[title2, group2]: [string, ActorGroup],
|
||||
) => {
|
||||
const infeasible1 = numInfeasible(group1);
|
||||
const infeasible2 = numInfeasible(group2);
|
||||
if (infeasible1 !== infeasible2) {
|
||||
return infeasible1 > infeasible2 ? -1 : 1;
|
||||
}
|
||||
return title1 > title2 ? 1 : -1;
|
||||
};
|
||||
const children = stableSort(
|
||||
Object.entries(actorGroups),
|
||||
groupComparator,
|
||||
).map(([title, actorGroup]) => (
|
||||
<ActorClassGroup
|
||||
actorGroup={actorGroup}
|
||||
title={title}
|
||||
key={`acg-${title}`}
|
||||
/>
|
||||
));
|
||||
|
||||
return (
|
||||
<React.Fragment>
|
||||
<Snackbar open={warningOpen}>
|
||||
<Alert severity="warning" onClose={() => setWarningOpen(false)}>
|
||||
There are one or more actors that cannot currently be created due to
|
||||
insufficient cluster resources. These have been sorted to the top of
|
||||
the list. If you are using autoscaling functionality, you may ignore
|
||||
this message.
|
||||
</Alert>
|
||||
</Snackbar>
|
||||
{children}
|
||||
</React.Fragment>
|
||||
);
|
||||
};
|
||||
|
||||
export default ActorClassGroups;
|
||||
@@ -1,64 +0,0 @@
|
||||
import { Divider, Grid, makeStyles, Theme } from "@material-ui/core";
|
||||
import React from "react";
|
||||
import { ActorState } from "../../../api";
|
||||
import LabeledDatum from "../../../common/LabeledDatum";
|
||||
import ActorStateRepr from "./ActorStateRepr";
|
||||
|
||||
type ActorDetailsPaneProps = {
|
||||
actorTitle: string;
|
||||
actorState: ActorState;
|
||||
actorDetails: {
|
||||
label: string;
|
||||
value: any;
|
||||
tooltip?: string;
|
||||
}[];
|
||||
};
|
||||
|
||||
const useStyles = makeStyles((theme: Theme) => ({
|
||||
divider: {
|
||||
width: "100%",
|
||||
margin: "0 auto",
|
||||
},
|
||||
actorTitleWrapper: {
|
||||
marginTop: theme.spacing(1),
|
||||
marginBottom: theme.spacing(1),
|
||||
fontWeight: "bold",
|
||||
fontSize: "130%",
|
||||
},
|
||||
detailsPane: {
|
||||
margin: theme.spacing(1),
|
||||
},
|
||||
}));
|
||||
|
||||
const ActorDetailsPane: React.FC<ActorDetailsPaneProps> = ({
|
||||
actorTitle,
|
||||
actorDetails,
|
||||
actorState,
|
||||
}) => {
|
||||
const classes = useStyles();
|
||||
return (
|
||||
<React.Fragment>
|
||||
<div className={classes.actorTitleWrapper}>
|
||||
<div>{actorTitle}</div>
|
||||
<ActorStateRepr state={actorState} />
|
||||
</div>
|
||||
<Divider className={classes.divider} />
|
||||
<Grid container className={classes.detailsPane}>
|
||||
{actorDetails.map(
|
||||
({ label, value, tooltip }) =>
|
||||
value &&
|
||||
value.length > 0 && (
|
||||
<LabeledDatum
|
||||
key={label}
|
||||
label={label}
|
||||
datum={value}
|
||||
tooltip={tooltip}
|
||||
/>
|
||||
),
|
||||
)}
|
||||
</Grid>
|
||||
</React.Fragment>
|
||||
);
|
||||
};
|
||||
|
||||
export default ActorDetailsPane;
|
||||
@@ -1,148 +0,0 @@
|
||||
import {
|
||||
createStyles,
|
||||
makeStyles,
|
||||
Theme,
|
||||
Tooltip,
|
||||
Typography,
|
||||
} from "@material-ui/core";
|
||||
import React from "react";
|
||||
import { ActorState } from "../../../api";
|
||||
|
||||
type ActorStateReprProps = {
|
||||
state: ActorState;
|
||||
showTooltip?: boolean;
|
||||
variant?: any;
|
||||
};
|
||||
|
||||
const {
|
||||
Alive,
|
||||
Dead,
|
||||
PendingCreation,
|
||||
Restarting,
|
||||
DependenciesUnready,
|
||||
Infeasible,
|
||||
PendingResources,
|
||||
} = ActorState;
|
||||
|
||||
const useActorStateReprStyles = makeStyles((theme: Theme) =>
|
||||
createStyles({
|
||||
infeasible: {
|
||||
color: theme.palette.error.light,
|
||||
},
|
||||
pendingResources: {
|
||||
color: theme.palette.warning.light,
|
||||
},
|
||||
unknown: {
|
||||
color: theme.palette.warning.light,
|
||||
},
|
||||
creating: {
|
||||
color: theme.palette.success.light,
|
||||
},
|
||||
alive: {
|
||||
color: theme.palette.success.dark,
|
||||
},
|
||||
restarting: {
|
||||
color: theme.palette.warning.light,
|
||||
},
|
||||
dead: {
|
||||
color: "#cccccc",
|
||||
},
|
||||
tooltip: {
|
||||
cursor: "help",
|
||||
},
|
||||
}),
|
||||
);
|
||||
const infeasibleTooltip =
|
||||
"The actor cannot be created because of insufficient resources in the cluster. Please examine its resource constraints to make sure they are correct or add additional compute to your cluster.";
|
||||
const pendingResourcesTooltip =
|
||||
"The actor is pending resources, such as GPU, Memory, or CPU. It will be created when they become available.";
|
||||
const aliveTooltip = "The actor is alive and handling remote calls.";
|
||||
const deadTooltip = "The actor is dead and will not be restarted anymore.";
|
||||
const restartingTooltip = "The actor died and is restarting.";
|
||||
const pendingCreationTooltip =
|
||||
"The actor's resources and other dependencies are ready, and the Ray backend is processing its creation.";
|
||||
const dependenciesUnreadyTooltip =
|
||||
"The actor is pending creation because it is waiting for one or more of its initialization arguments to be ready.";
|
||||
|
||||
const stateToTooltip = {
|
||||
[Alive]: aliveTooltip,
|
||||
[Dead]: deadTooltip,
|
||||
[Infeasible]: infeasibleTooltip,
|
||||
[Restarting]: restartingTooltip,
|
||||
[PendingCreation]: pendingCreationTooltip,
|
||||
[DependenciesUnready]: dependenciesUnreadyTooltip,
|
||||
[PendingResources]: pendingResourcesTooltip,
|
||||
};
|
||||
|
||||
const ActorStateRepr: React.FC<ActorStateReprProps> = ({
|
||||
state,
|
||||
variant,
|
||||
showTooltip,
|
||||
}) => {
|
||||
const classes = useActorStateReprStyles();
|
||||
const variantOrDefault = variant ?? "body1";
|
||||
let body;
|
||||
switch (state) {
|
||||
case Infeasible:
|
||||
body = (
|
||||
<Typography variant={variantOrDefault} className={classes.infeasible}>
|
||||
Infeasible
|
||||
</Typography>
|
||||
);
|
||||
break;
|
||||
case PendingResources:
|
||||
body = (
|
||||
<Typography
|
||||
variant={variantOrDefault}
|
||||
className={classes.pendingResources}
|
||||
>
|
||||
Pending Resources
|
||||
</Typography>
|
||||
);
|
||||
break;
|
||||
case PendingCreation:
|
||||
body = (
|
||||
<Typography variant={variantOrDefault} className={classes.creating}>
|
||||
Creating
|
||||
</Typography>
|
||||
);
|
||||
break;
|
||||
case DependenciesUnready:
|
||||
body = (
|
||||
<Typography variant={variantOrDefault} className={classes.creating}>
|
||||
Dependencies Unready
|
||||
</Typography>
|
||||
);
|
||||
break;
|
||||
case Alive:
|
||||
body = (
|
||||
<Typography variant={variantOrDefault} className={classes.alive}>
|
||||
Alive
|
||||
</Typography>
|
||||
);
|
||||
break;
|
||||
case Restarting:
|
||||
body = (
|
||||
<Typography variant={variantOrDefault} className={classes.restarting}>
|
||||
Restarting
|
||||
</Typography>
|
||||
);
|
||||
break;
|
||||
case Dead:
|
||||
body = (
|
||||
<Typography variant={variantOrDefault} className={classes.dead}>
|
||||
Dead
|
||||
</Typography>
|
||||
);
|
||||
break;
|
||||
}
|
||||
return showTooltip ? (
|
||||
<Tooltip className={classes.tooltip} title={stateToTooltip[state]}>
|
||||
{body}
|
||||
</Tooltip>
|
||||
) : (
|
||||
body
|
||||
);
|
||||
};
|
||||
|
||||
export default ActorStateRepr;
|
||||
@@ -1,75 +0,0 @@
|
||||
import {
|
||||
Box,
|
||||
createStyles,
|
||||
FormControl,
|
||||
FormHelperText,
|
||||
Input,
|
||||
InputLabel,
|
||||
makeStyles,
|
||||
Theme,
|
||||
Typography,
|
||||
} from "@material-ui/core";
|
||||
import React, { useState } from "react";
|
||||
import { useSelector } from "react-redux";
|
||||
import { useDebounce } from "use-debounce";
|
||||
import { StoreState } from "../../../store";
|
||||
import ActorClassGroups from "./ActorClassGroups";
|
||||
|
||||
const useLogicalViewStyles = makeStyles((theme: Theme) =>
|
||||
createStyles({
|
||||
container: {
|
||||
marginBottom: theme.spacing(1),
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
||||
const actorClassMatchesSearch = (
|
||||
actorClass: string,
|
||||
nameFilter: string,
|
||||
): boolean => {
|
||||
const loweredNameFilter = nameFilter.toLowerCase();
|
||||
return actorClass.toLowerCase().search(loweredNameFilter) !== -1;
|
||||
};
|
||||
|
||||
const rayletInfoSelector = (state: StoreState) => state.dashboard.rayletInfo;
|
||||
|
||||
const LogicalView: React.FC = () => {
|
||||
const [nameFilter, setNameFilter] = useState("");
|
||||
const [debouncedNameFilter] = useDebounce(nameFilter, 500);
|
||||
const classes = useLogicalViewStyles();
|
||||
const rayletInfo = useSelector(rayletInfoSelector);
|
||||
if (rayletInfo === null || !rayletInfo.actorGroups) {
|
||||
return <Typography color="textSecondary">Loading...</Typography>;
|
||||
}
|
||||
const actorGroups =
|
||||
debouncedNameFilter === ""
|
||||
? Object.entries(rayletInfo.actorGroups)
|
||||
: Object.entries(rayletInfo.actorGroups).filter(([key, _]) =>
|
||||
actorClassMatchesSearch(key, debouncedNameFilter),
|
||||
);
|
||||
return (
|
||||
<Box className={classes.container}>
|
||||
{actorGroups.length === 0 ? (
|
||||
<Typography color="textSecondary">No actors found.</Typography>
|
||||
) : (
|
||||
<React.Fragment>
|
||||
<FormControl>
|
||||
<InputLabel htmlFor="actor-name-filter">Actor Search</InputLabel>
|
||||
<Input
|
||||
id="actor-name-filter"
|
||||
aria-describedby="actor-name-helper-text"
|
||||
value={nameFilter}
|
||||
onChange={(event) => setNameFilter(event.target.value)}
|
||||
/>
|
||||
<FormHelperText id="actor-name-helper-text">
|
||||
Search for an actor by name
|
||||
</FormHelperText>
|
||||
</FormControl>
|
||||
<ActorClassGroups actorGroups={Object.fromEntries(actorGroups)} />
|
||||
</React.Fragment>
|
||||
)}
|
||||
</Box>
|
||||
);
|
||||
};
|
||||
|
||||
export default LogicalView;
|
||||
@@ -1,23 +0,0 @@
|
||||
import { Box, makeStyles, Typography } from "@material-ui/core";
|
||||
import React from "react";
|
||||
|
||||
type ExpanderRowProps = {
|
||||
onExpand: () => any;
|
||||
};
|
||||
|
||||
const useExpanderRowStyles = makeStyles({
|
||||
root: {
|
||||
cursor: "pointer",
|
||||
},
|
||||
});
|
||||
|
||||
const ExpanderRow: React.FC<ExpanderRowProps> = ({ onExpand }) => {
|
||||
const classes = useExpanderRowStyles();
|
||||
return (
|
||||
<Box onClick={(_) => onExpand()} component="div" className={classes.root}>
|
||||
<Typography variant="overline">Show more</Typography>
|
||||
</Box>
|
||||
);
|
||||
};
|
||||
|
||||
export default ExpanderRow;
|
||||
@@ -1,179 +0,0 @@
|
||||
import {
|
||||
Box,
|
||||
Button,
|
||||
createStyles,
|
||||
FormControl,
|
||||
InputLabel,
|
||||
makeStyles,
|
||||
MenuItem,
|
||||
Select,
|
||||
Theme,
|
||||
Typography,
|
||||
} from "@material-ui/core";
|
||||
import PauseIcon from "@material-ui/icons/Pause";
|
||||
import PlayArrowIcon from "@material-ui/icons/PlayArrow";
|
||||
import SubdirectoryArrowRightIcon from "@material-ui/icons/SubdirectoryArrowRight";
|
||||
import React, { useCallback, useEffect, useRef, useState } from "react";
|
||||
import { useDispatch, useSelector } from "react-redux";
|
||||
import {
|
||||
getMemoryTable,
|
||||
MemoryGroupByKey,
|
||||
MemoryTableResponse,
|
||||
stopMemoryTableCollection,
|
||||
} from "../../../api";
|
||||
import { StoreState } from "../../../store";
|
||||
import { dashboardActions } from "../state";
|
||||
import MemoryRowGroup from "./MemoryRowGroup";
|
||||
|
||||
const groupTitle = (groupKey: string, groupBy: MemoryGroupByKey) => {
|
||||
if (groupBy === "node") {
|
||||
return <Typography variant="h6">{`Node ${groupKey}`}</Typography>;
|
||||
}
|
||||
if (groupBy === "stack_trace") {
|
||||
return <PyStackTrace stackTrace={groupKey} />;
|
||||
}
|
||||
if (groupBy === "") {
|
||||
return <Typography variant="h6">All entries</Typography>;
|
||||
}
|
||||
return <Typography variant="h6">Unknown Group</Typography>;
|
||||
};
|
||||
|
||||
const PyStackTrace: React.FC<{ stackTrace: string }> = ({ stackTrace }) => {
|
||||
const stackFrames = stackTrace.split(" | ");
|
||||
const renderedFrames = stackFrames.map((frame, i) => (
|
||||
<Typography
|
||||
variant={i === 0 ? "h6" : "subtitle2"}
|
||||
style={{ marginLeft: `${i}em` }}
|
||||
key={i}
|
||||
>
|
||||
{i !== 0 && <SubdirectoryArrowRightIcon />}
|
||||
{frame}
|
||||
</Typography>
|
||||
));
|
||||
return <Box>{renderedFrames}</Box>;
|
||||
};
|
||||
|
||||
const MEMORY_POLLING_INTERVAL_MS = 4000;
|
||||
|
||||
const useMemoryInfoStyles = makeStyles((theme: Theme) =>
|
||||
createStyles({
|
||||
pauseButton: {
|
||||
margin: theme.spacing(1),
|
||||
padding: theme.spacing(1),
|
||||
float: "right",
|
||||
},
|
||||
select: {
|
||||
minWidth: "7em",
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
||||
const memoryInfoSelector = (state: StoreState) => ({
|
||||
tab: state.dashboard.tab,
|
||||
memoryTable: state.dashboard.memoryTable,
|
||||
shouldObtainMemoryTable: state.dashboard.shouldObtainMemoryTable,
|
||||
});
|
||||
|
||||
const fetchMemoryTable = (
|
||||
groupByKey: MemoryGroupByKey,
|
||||
setResults: (mtr: MemoryTableResponse) => void,
|
||||
) => {
|
||||
return async () => {
|
||||
const resp = await getMemoryTable(groupByKey);
|
||||
setResults(resp);
|
||||
};
|
||||
};
|
||||
|
||||
const MemoryInfo: React.FC<{}> = () => {
|
||||
const { memoryTable } = useSelector(memoryInfoSelector);
|
||||
const dispatch = useDispatch();
|
||||
|
||||
const [paused, setPaused] = useState(false);
|
||||
const pauseButtonIcon = paused ? <PlayArrowIcon /> : <PauseIcon />;
|
||||
|
||||
const classes = useMemoryInfoStyles();
|
||||
const [groupBy, setGroupBy] = useState<MemoryGroupByKey>("node");
|
||||
|
||||
// Set up polling memory data
|
||||
const fetchData = useCallback(
|
||||
fetchMemoryTable(groupBy, (resp) =>
|
||||
dispatch(dashboardActions.setMemoryTable(resp)),
|
||||
),
|
||||
[groupBy],
|
||||
);
|
||||
const intervalId = useRef<any>(null);
|
||||
useEffect(() => {
|
||||
if (!intervalId.current && !paused) {
|
||||
fetchData();
|
||||
intervalId.current = setInterval(fetchData, MEMORY_POLLING_INTERVAL_MS);
|
||||
}
|
||||
const cleanup = () => {
|
||||
if (intervalId.current) {
|
||||
clearInterval(intervalId.current);
|
||||
intervalId.current = null;
|
||||
}
|
||||
};
|
||||
return cleanup;
|
||||
}, [paused, fetchData]);
|
||||
|
||||
if (!memoryTable) {
|
||||
return (
|
||||
<Typography variant="h5" align="center">
|
||||
Loading memory information
|
||||
</Typography>
|
||||
);
|
||||
}
|
||||
|
||||
const children = Object.entries(memoryTable.group)
|
||||
.sort(([key1], [key2]) => (key1 < key2 ? -1 : 1))
|
||||
.map(([groupKey, memoryGroup]) => (
|
||||
<MemoryRowGroup
|
||||
key={groupKey}
|
||||
groupKey={groupKey}
|
||||
groupTitle={groupTitle(groupKey, groupBy)}
|
||||
entries={memoryGroup.entries}
|
||||
summary={memoryGroup.summary}
|
||||
initialExpanded={false}
|
||||
initialVisibleEntries={10}
|
||||
/>
|
||||
));
|
||||
return (
|
||||
<Box>
|
||||
<FormControl>
|
||||
<InputLabel shrink id="group-by-label">
|
||||
Group by
|
||||
</InputLabel>
|
||||
<Select
|
||||
labelId="group-by-label"
|
||||
value={groupBy}
|
||||
className={classes.select}
|
||||
onChange={(e: any) => setGroupBy(e.target.value)}
|
||||
color="primary"
|
||||
displayEmpty
|
||||
>
|
||||
<MenuItem value="">
|
||||
<em>None</em>
|
||||
</MenuItem>
|
||||
<MenuItem value={"node"}>Node IP Address</MenuItem>
|
||||
<MenuItem value={"stack_trace"}>Stack Trace</MenuItem>
|
||||
</Select>
|
||||
</FormControl>
|
||||
<Button
|
||||
color="primary"
|
||||
className={classes.pauseButton}
|
||||
onClick={() => {
|
||||
if (!paused) {
|
||||
stopMemoryTableCollection();
|
||||
}
|
||||
setPaused(!paused);
|
||||
}}
|
||||
>
|
||||
{pauseButtonIcon}
|
||||
{paused ? "Resume Collection" : "Pause Collection"}
|
||||
</Button>
|
||||
{children}
|
||||
</Box>
|
||||
);
|
||||
};
|
||||
|
||||
export default MemoryInfo;
|
||||
@@ -1,80 +0,0 @@
|
||||
import {
|
||||
Box,
|
||||
createStyles,
|
||||
makeStyles,
|
||||
Paper,
|
||||
styled,
|
||||
Theme,
|
||||
} from "@material-ui/core";
|
||||
import React, { ReactChild, useState } from "react";
|
||||
import { MemoryTableEntry, MemoryTableSummary } from "../../../api";
|
||||
import { Expander, Minimizer } from "../../../common/ExpandControls";
|
||||
import MemorySummary from "./MemorySummary";
|
||||
import MemoryTable from "./MemoryTable";
|
||||
|
||||
const CenteredBox = styled(Box)({
|
||||
textAlign: "center",
|
||||
});
|
||||
|
||||
const useMemoryRowGroupStyles = makeStyles((theme: Theme) =>
|
||||
createStyles({
|
||||
container: {
|
||||
marginTop: theme.spacing(2),
|
||||
marginBottom: theme.spacing(2),
|
||||
paddingTop: theme.spacing(2),
|
||||
paddingBottom: theme.spacing(1),
|
||||
paddingLeft: theme.spacing(2),
|
||||
paddingRight: theme.spacing(2),
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
||||
type MemoryRowGroupProps = {
|
||||
groupKey: string;
|
||||
groupTitle: ReactChild;
|
||||
summary: MemoryTableSummary;
|
||||
entries: MemoryTableEntry[];
|
||||
initialExpanded: boolean;
|
||||
initialVisibleEntries: number;
|
||||
};
|
||||
|
||||
const MemoryRowGroup: React.FC<MemoryRowGroupProps> = ({
|
||||
groupKey,
|
||||
groupTitle,
|
||||
entries,
|
||||
summary,
|
||||
initialExpanded,
|
||||
initialVisibleEntries,
|
||||
}) => {
|
||||
const classes = useMemoryRowGroupStyles();
|
||||
const [expanded, setExpanded] = useState(initialExpanded);
|
||||
const [numVisibleEntries, setNumVisibleEntries] = useState(
|
||||
initialVisibleEntries,
|
||||
);
|
||||
const toggleExpanded = () => setExpanded(!expanded);
|
||||
const showMoreEntries = () => setNumVisibleEntries(numVisibleEntries + 10);
|
||||
const visibleEntries = entries.slice(0, numVisibleEntries);
|
||||
return (
|
||||
<Paper key={groupKey} className={classes.container}>
|
||||
{groupTitle}
|
||||
<MemorySummary initialExpanded={false} memoryTableSummary={summary} />
|
||||
{expanded ? (
|
||||
<React.Fragment>
|
||||
<MemoryTable tableEntries={visibleEntries} />
|
||||
<CenteredBox>
|
||||
{entries.length > numVisibleEntries && (
|
||||
<Expander onClick={showMoreEntries} />
|
||||
)}
|
||||
<Minimizer onClick={toggleExpanded} />
|
||||
</CenteredBox>
|
||||
</React.Fragment>
|
||||
) : (
|
||||
<CenteredBox>
|
||||
<Expander onClick={toggleExpanded} />
|
||||
</CenteredBox>
|
||||
)}
|
||||
</Paper>
|
||||
);
|
||||
};
|
||||
|
||||
export default MemoryRowGroup;
|
||||
@@ -1,59 +0,0 @@
|
||||
import { createStyles, Grid, makeStyles, Theme } from "@material-ui/core";
|
||||
import React from "react";
|
||||
import { MemoryTableSummary } from "../../../api";
|
||||
import { formatByteAmount } from "../../../common/formatUtils";
|
||||
import LabeledDatum from "../../../common/LabeledDatum";
|
||||
|
||||
const useMemorySummaryStyles = makeStyles((theme: Theme) =>
|
||||
createStyles({
|
||||
expandCollapseIcon: {
|
||||
color: theme.palette.text.secondary,
|
||||
fontSize: "1.5em",
|
||||
verticalAlign: "middle",
|
||||
},
|
||||
container: {
|
||||
padding: theme.spacing(1),
|
||||
margin: theme.spacing(1),
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
||||
type MemorySummaryProps = {
|
||||
memoryTableSummary: MemoryTableSummary;
|
||||
initialExpanded: boolean;
|
||||
};
|
||||
|
||||
const MemorySummary: React.FC<MemorySummaryProps> = ({
|
||||
memoryTableSummary,
|
||||
}) => {
|
||||
const classes = useMemorySummaryStyles();
|
||||
const memoryData = [
|
||||
[
|
||||
"Total Local Reference Count",
|
||||
`${memoryTableSummary.total_local_ref_count}`,
|
||||
],
|
||||
["Pinned in Memory Count", `${memoryTableSummary.total_pinned_in_memory}`],
|
||||
[
|
||||
"Total Used by Pending Tasks Count",
|
||||
`${memoryTableSummary.total_used_by_pending_task}`,
|
||||
],
|
||||
[
|
||||
"Total Captured in Objects Count",
|
||||
`${memoryTableSummary.total_captured_in_objects}`,
|
||||
],
|
||||
[
|
||||
"Total Memory Used by Objects",
|
||||
`${formatByteAmount(memoryTableSummary.total_object_size, "mebibyte")}`,
|
||||
],
|
||||
["Total Actor Handle Count", `${memoryTableSummary.total_actor_handles}`],
|
||||
];
|
||||
|
||||
return (
|
||||
<Grid container className={classes.container}>
|
||||
{memoryData.map(([label, value]) => (
|
||||
<LabeledDatum key={label} label={label} datum={value} />
|
||||
))}
|
||||
</Grid>
|
||||
);
|
||||
};
|
||||
export default MemorySummary;
|
||||
@@ -1,105 +0,0 @@
|
||||
import {
|
||||
createStyles,
|
||||
makeStyles,
|
||||
Paper,
|
||||
Table,
|
||||
TableBody,
|
||||
Theme,
|
||||
} from "@material-ui/core";
|
||||
import React from "react";
|
||||
import { MemoryTableEntry } from "../../../api";
|
||||
import SortableTableHead, {
|
||||
HeaderInfo,
|
||||
} from "../../../common/SortableTableHead";
|
||||
import { getComparator, Order, stableSort } from "../../../common/tableUtils";
|
||||
|
||||
import { MemoryTableRow } from "./MemoryTableRow";
|
||||
|
||||
const useMemoryTableStyles = makeStyles((theme: Theme) =>
|
||||
createStyles({
|
||||
container: {
|
||||
margin: theme.spacing(1),
|
||||
padding: theme.spacing(1),
|
||||
},
|
||||
cell: {
|
||||
padding: theme.spacing(1),
|
||||
textAlign: "center",
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
||||
type memoryColumnId =
|
||||
| "node_ip_address"
|
||||
| "pid"
|
||||
| "type"
|
||||
| "object_ref"
|
||||
| "object_size"
|
||||
| "reference_type"
|
||||
| "call_site";
|
||||
|
||||
const memoryHeaderInfo: HeaderInfo<memoryColumnId>[] = [
|
||||
{
|
||||
id: "node_ip_address",
|
||||
label: "IP Address",
|
||||
numeric: false,
|
||||
sortable: true,
|
||||
},
|
||||
{ id: "pid", label: "PID", numeric: false, sortable: true },
|
||||
{ id: "type", label: "Type", numeric: false, sortable: true },
|
||||
{ id: "object_ref", label: "Object Ref", numeric: false, sortable: true },
|
||||
{
|
||||
id: "object_size",
|
||||
label: "Object Size",
|
||||
numeric: false,
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
id: "reference_type",
|
||||
label: "Reference Type",
|
||||
numeric: false,
|
||||
sortable: true,
|
||||
},
|
||||
{ id: "call_site", label: "Call Site", numeric: false, sortable: true },
|
||||
];
|
||||
|
||||
type MemoryTableProps = {
|
||||
tableEntries: MemoryTableEntry[];
|
||||
};
|
||||
|
||||
const MemoryTable: React.FC<MemoryTableProps> = ({ tableEntries }) => {
|
||||
const toggleOrder = () => setOrder(order === "asc" ? "desc" : "asc");
|
||||
const classes = useMemoryTableStyles();
|
||||
const [order, setOrder] = React.useState<Order>("asc");
|
||||
const [orderBy, setOrderBy] = React.useState<memoryColumnId | null>(null);
|
||||
const comparator = orderBy && getComparator(order, orderBy);
|
||||
const sortedTableEntries = comparator
|
||||
? stableSort(tableEntries, comparator)
|
||||
: tableEntries;
|
||||
const tableRows = sortedTableEntries.map((tableEntry) => (
|
||||
<MemoryTableRow memoryTableEntry={tableEntry} key={tableEntry.object_ref} />
|
||||
));
|
||||
// Todo(max) add in sorting code
|
||||
return (
|
||||
<Paper className={classes.container} elevation={2}>
|
||||
<Table>
|
||||
<SortableTableHead
|
||||
orderBy={orderBy}
|
||||
order={order}
|
||||
onRequestSort={(_, property) => {
|
||||
if (property === orderBy) {
|
||||
toggleOrder();
|
||||
} else {
|
||||
setOrderBy(property);
|
||||
setOrder("asc");
|
||||
}
|
||||
}}
|
||||
headerInfo={memoryHeaderInfo}
|
||||
firstColumnEmpty={false}
|
||||
/>
|
||||
<TableBody>{tableRows}</TableBody>
|
||||
</Table>
|
||||
</Paper>
|
||||
);
|
||||
};
|
||||
|
||||
export default MemoryTable;
|
||||
@@ -1,33 +0,0 @@
|
||||
import { TableRow } from "@material-ui/core";
|
||||
import React from "react";
|
||||
import { MemoryTableEntry } from "../../../api";
|
||||
import { formatByteAmount } from "../../../common/formatUtils";
|
||||
import { StyledTableCell } from "../../../common/TableCell";
|
||||
|
||||
type Props = {
|
||||
memoryTableEntry: MemoryTableEntry;
|
||||
};
|
||||
|
||||
export const MemoryTableRow = (props: Props) => {
|
||||
const { memoryTableEntry } = props;
|
||||
const object_size =
|
||||
memoryTableEntry.object_size === -1
|
||||
? "?"
|
||||
: formatByteAmount(memoryTableEntry.object_size, "mebibyte");
|
||||
const memoryTableEntryValues = [
|
||||
memoryTableEntry.node_ip_address,
|
||||
memoryTableEntry.pid,
|
||||
memoryTableEntry.type,
|
||||
memoryTableEntry.object_ref,
|
||||
object_size,
|
||||
memoryTableEntry.reference_type,
|
||||
memoryTableEntry.call_site,
|
||||
];
|
||||
return (
|
||||
<TableRow hover>
|
||||
{memoryTableEntryValues.map((value, index) => (
|
||||
<StyledTableCell key={`${index}`}>{value}</StyledTableCell>
|
||||
))}
|
||||
</TableRow>
|
||||
);
|
||||
};
|
||||
@@ -1,294 +0,0 @@
|
||||
import {
|
||||
Checkbox,
|
||||
createStyles,
|
||||
FormControlLabel,
|
||||
makeStyles,
|
||||
Table,
|
||||
TableBody,
|
||||
Theme,
|
||||
Typography,
|
||||
} from "@material-ui/core";
|
||||
import React, { useState } from "react";
|
||||
import { useSelector } from "react-redux";
|
||||
import { RayletInfoResponse } from "../../../api";
|
||||
import SortableTableHead, {
|
||||
HeaderInfo,
|
||||
} from "../../../common/SortableTableHead";
|
||||
import { getFnComparator, Order, stableSort } from "../../../common/tableUtils";
|
||||
import { sum } from "../../../common/util";
|
||||
import { StoreState } from "../../../store";
|
||||
import Errors from "./dialogs/errors/Errors";
|
||||
import Logs from "./dialogs/logs/Logs";
|
||||
import cpuFeature from "./features/CPU";
|
||||
import diskFeature from "./features/Disk";
|
||||
import makeErrorsFeature from "./features/Errors";
|
||||
import gpuFeature from "./features/GPU";
|
||||
import gramFeature from "./features/GRAM";
|
||||
import hostFeature from "./features/Host";
|
||||
import makeLogsFeature from "./features/Logs";
|
||||
import objectStoreMemoryFeature from "./features/ObjectStoreMemory";
|
||||
import ramFeature from "./features/RAM";
|
||||
import receivedFeature from "./features/Received";
|
||||
import sentFeature from "./features/Sent";
|
||||
import {
|
||||
Node,
|
||||
nodeInfoColumnId,
|
||||
NodeInfoFeature,
|
||||
WorkerFeatureData,
|
||||
} from "./features/types";
|
||||
import uptimeFeature from "./features/Uptime";
|
||||
import workersFeature from "./features/Workers";
|
||||
import NodeRowGroup from "./NodeRowGroup";
|
||||
import { NodeWorkerRow } from "./NodeWorkerRow";
|
||||
import TotalRow from "./TotalRow";
|
||||
|
||||
const sortWorkers = (
|
||||
workerFeatureData: WorkerFeatureData[],
|
||||
sortWorkerComparator: any,
|
||||
) => {
|
||||
// Sorts idle workers to end, applies the worker comparator function to sort
|
||||
// then returns a new list of worker feature data.
|
||||
const idleSortedClusterWorkers = workerFeatureData.sort((wfd1, wfd2) => {
|
||||
const w1 = wfd1.worker;
|
||||
const w2 = wfd2.worker;
|
||||
if (w2.cmdline[0] === "ray::IDLE") {
|
||||
return -1;
|
||||
}
|
||||
if (w1.cmdline[0] === "ray::IDLE") {
|
||||
return 1;
|
||||
}
|
||||
return w1.pid < w2.pid ? -1 : 1;
|
||||
});
|
||||
return sortWorkerComparator
|
||||
? stableSort(idleSortedClusterWorkers, sortWorkerComparator)
|
||||
: idleSortedClusterWorkers;
|
||||
};
|
||||
|
||||
const makeGroupedTableContents = (
|
||||
nodes: Node[],
|
||||
sortWorkerComparator: any,
|
||||
sortGroupComparator: any,
|
||||
rayletInfo: RayletInfoResponse | null,
|
||||
nodeInfoFeatures: NodeInfoFeature[],
|
||||
) => {
|
||||
const sortedGroups = sortGroupComparator
|
||||
? stableSort(nodes, sortGroupComparator)
|
||||
: nodes;
|
||||
return sortedGroups.map((node) => {
|
||||
const plasmaStats = rayletInfo?.plasmaStats?.[node.ip];
|
||||
const workerFeatureData: WorkerFeatureData[] = node.workers.map(
|
||||
(worker) => {
|
||||
const rayletWorker =
|
||||
rayletInfo?.nodes?.[node.ip]?.workersStats?.find(
|
||||
(workerStats) => workerStats.pid === worker.pid,
|
||||
) || null;
|
||||
return {
|
||||
node,
|
||||
worker,
|
||||
rayletWorker,
|
||||
};
|
||||
},
|
||||
);
|
||||
|
||||
const sortedClusterWorkers = sortWorkers(
|
||||
workerFeatureData,
|
||||
sortWorkerComparator,
|
||||
);
|
||||
return (
|
||||
<NodeRowGroup
|
||||
key={node.ip}
|
||||
node={node}
|
||||
workerFeatureData={sortedClusterWorkers}
|
||||
features={nodeInfoFeatures}
|
||||
plasmaStats={plasmaStats}
|
||||
initialExpanded={nodes.length <= 1}
|
||||
/>
|
||||
);
|
||||
});
|
||||
};
|
||||
|
||||
const makeUngroupedTableContents = (
|
||||
nodes: Node[],
|
||||
sortWorkerComparator: any,
|
||||
rayletInfo: RayletInfoResponse | null,
|
||||
nodeInfoFeatures: NodeInfoFeature[],
|
||||
) => {
|
||||
const workerInfoFeatures = nodeInfoFeatures.map(
|
||||
(feature) => feature.WorkerFeatureRenderFn,
|
||||
);
|
||||
const allWorkerFeatures: WorkerFeatureData[] = nodes.flatMap((node) => {
|
||||
return node.workers.map((worker) => {
|
||||
const rayletWorker =
|
||||
rayletInfo?.nodes?.[node.ip]?.workersStats?.find(
|
||||
(workerStats) => workerStats.pid === worker.pid,
|
||||
) || null;
|
||||
return {
|
||||
node: node,
|
||||
worker,
|
||||
rayletWorker,
|
||||
};
|
||||
});
|
||||
});
|
||||
const sortedWorkers = sortWorkers(allWorkerFeatures, sortWorkerComparator);
|
||||
return sortedWorkers.map((workerFeatureDatum, i) => (
|
||||
<NodeWorkerRow
|
||||
features={workerInfoFeatures}
|
||||
data={workerFeatureDatum}
|
||||
key={`worker-${i}`}
|
||||
/>
|
||||
));
|
||||
};
|
||||
|
||||
const useNodeInfoStyles = makeStyles((theme: Theme) =>
|
||||
createStyles({
|
||||
table: {
|
||||
marginTop: theme.spacing(1),
|
||||
},
|
||||
cell: {
|
||||
padding: theme.spacing(1),
|
||||
textAlign: "center",
|
||||
"&:last-child": {
|
||||
paddingRight: theme.spacing(1),
|
||||
},
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
||||
const nodeInfoSelector = (state: StoreState) => ({
|
||||
nodeInfo: state.dashboard.nodeInfo,
|
||||
rayletInfo: state.dashboard.rayletInfo,
|
||||
});
|
||||
|
||||
type DialogState = {
|
||||
hostname: string;
|
||||
pid: number | null;
|
||||
} | null;
|
||||
|
||||
const nodeInfoHeaders: HeaderInfo<nodeInfoColumnId>[] = [
|
||||
{ id: "host", label: "Host", numeric: true, sortable: true },
|
||||
{ id: "workers", label: "PID", numeric: true, sortable: false },
|
||||
{ id: "uptime", label: "Uptime (s)", numeric: true, sortable: true },
|
||||
{ id: "cpu", label: "CPU", numeric: false, sortable: true },
|
||||
{ id: "ram", label: "RAM", numeric: true, sortable: true },
|
||||
{ id: "gpu", label: "GPU", numeric: true, sortable: true },
|
||||
{ id: "gram", label: "GRAM", numeric: true, sortable: true },
|
||||
{ id: "objectStoreMemory", label: "Plasma", numeric: false, sortable: true },
|
||||
{ id: "disk", label: "Disk", numeric: true, sortable: true },
|
||||
{ id: "sent", label: "Sent", numeric: true, sortable: true },
|
||||
{ id: "received", label: "Received", numeric: false, sortable: true },
|
||||
{ id: "logs", label: "Logs", numeric: false, sortable: true },
|
||||
{ id: "errors", label: "Errors", numeric: false, sortable: true },
|
||||
];
|
||||
|
||||
const NodeInfo: React.FC<{}> = () => {
|
||||
const [logDialog, setLogDialog] = useState<DialogState>(null);
|
||||
const [errorDialog, setErrorDialog] = useState<DialogState>(null);
|
||||
const [isGrouped, setIsGrouped] = useState(true);
|
||||
const [order, setOrder] = React.useState<Order>("asc");
|
||||
const toggleOrder = () => setOrder(order === "asc" ? "desc" : "asc");
|
||||
const [orderBy, setOrderBy] = React.useState<nodeInfoColumnId | null>(null);
|
||||
const classes = useNodeInfoStyles();
|
||||
const { nodeInfo, rayletInfo } = useSelector(nodeInfoSelector);
|
||||
if (nodeInfo === null || rayletInfo === null) {
|
||||
return <Typography color="textSecondary">Loading...</Typography>;
|
||||
}
|
||||
const clusterTotalWorkers = sum(
|
||||
nodeInfo.clients.map((c) => c.workers.length),
|
||||
);
|
||||
const nodeInfoFeatures: NodeInfoFeature[] = [
|
||||
hostFeature,
|
||||
workersFeature,
|
||||
uptimeFeature,
|
||||
cpuFeature,
|
||||
ramFeature,
|
||||
gpuFeature,
|
||||
gramFeature,
|
||||
objectStoreMemoryFeature,
|
||||
diskFeature,
|
||||
sentFeature,
|
||||
receivedFeature,
|
||||
makeLogsFeature((hostname, pid) => setLogDialog({ hostname, pid })),
|
||||
makeErrorsFeature((hostname, pid) => setErrorDialog({ hostname, pid })),
|
||||
];
|
||||
const sortNodeAccessor = nodeInfoFeatures.find(
|
||||
(feature) => feature.id === orderBy,
|
||||
)?.nodeAccessor;
|
||||
const sortNodeComparator =
|
||||
sortNodeAccessor && getFnComparator(order, sortNodeAccessor);
|
||||
const sortWorkerAccessor = nodeInfoFeatures.find(
|
||||
(feature) => feature.id === orderBy,
|
||||
)?.workerAccessor;
|
||||
const sortWorkerComparator =
|
||||
sortWorkerAccessor && getFnComparator(order, sortWorkerAccessor);
|
||||
const tableContents = isGrouped
|
||||
? makeGroupedTableContents(
|
||||
nodeInfo.clients,
|
||||
sortWorkerComparator,
|
||||
sortNodeComparator,
|
||||
rayletInfo,
|
||||
nodeInfoFeatures,
|
||||
)
|
||||
: makeUngroupedTableContents(
|
||||
nodeInfo.clients,
|
||||
sortWorkerComparator,
|
||||
rayletInfo,
|
||||
nodeInfoFeatures,
|
||||
);
|
||||
return (
|
||||
<React.Fragment>
|
||||
<FormControlLabel
|
||||
control={
|
||||
<Checkbox
|
||||
checked={isGrouped}
|
||||
onChange={() => setIsGrouped(!isGrouped)}
|
||||
color="primary"
|
||||
/>
|
||||
}
|
||||
label="Group by host"
|
||||
/>
|
||||
<Table className={classes.table}>
|
||||
<SortableTableHead
|
||||
onRequestSort={(_, property) => {
|
||||
if (property === orderBy) {
|
||||
toggleOrder();
|
||||
} else {
|
||||
setOrderBy(property);
|
||||
setOrder("asc");
|
||||
}
|
||||
}}
|
||||
headerInfo={nodeInfoHeaders}
|
||||
order={order}
|
||||
orderBy={orderBy}
|
||||
firstColumnEmpty={true}
|
||||
/>
|
||||
<TableBody>
|
||||
{tableContents}
|
||||
<TotalRow
|
||||
clusterTotalWorkers={clusterTotalWorkers}
|
||||
nodes={nodeInfo.clients}
|
||||
plasmaStats={Object.values(rayletInfo.plasmaStats)}
|
||||
features={nodeInfoFeatures.map(
|
||||
(feature) => feature.ClusterFeatureRenderFn,
|
||||
)}
|
||||
/>
|
||||
</TableBody>
|
||||
</Table>
|
||||
{logDialog !== null && (
|
||||
<Logs
|
||||
clearLogDialog={() => setLogDialog(null)}
|
||||
hostname={logDialog.hostname}
|
||||
pid={logDialog.pid}
|
||||
/>
|
||||
)}
|
||||
{errorDialog !== null && (
|
||||
<Errors
|
||||
clearErrorDialog={() => setErrorDialog(null)}
|
||||
hostname={errorDialog.hostname}
|
||||
pid={errorDialog.pid}
|
||||
/>
|
||||
)}
|
||||
</React.Fragment>
|
||||
);
|
||||
};
|
||||
|
||||
export default NodeInfo;
|
||||
@@ -1,117 +0,0 @@
|
||||
import {
|
||||
createStyles,
|
||||
makeStyles,
|
||||
TableCell,
|
||||
TableRow,
|
||||
Theme,
|
||||
} from "@material-ui/core";
|
||||
import AddIcon from "@material-ui/icons/Add";
|
||||
import RemoveIcon from "@material-ui/icons/Remove";
|
||||
import classNames from "classnames";
|
||||
import React, { useState } from "react";
|
||||
import { NodeInfoResponse, PlasmaStats } from "../../../api";
|
||||
import { StyledTableCell } from "../../../common/TableCell";
|
||||
import { NodeInfoFeature, WorkerFeatureData } from "./features/types";
|
||||
import { NodeWorkerRow } from "./NodeWorkerRow";
|
||||
|
||||
const useNodeRowGroupStyles = makeStyles((theme: Theme) =>
|
||||
createStyles({
|
||||
cell: {
|
||||
padding: theme.spacing(1),
|
||||
textAlign: "center",
|
||||
"&:last-child": {
|
||||
paddingRight: theme.spacing(1),
|
||||
},
|
||||
},
|
||||
expandCollapseCell: {
|
||||
cursor: "pointer",
|
||||
},
|
||||
expandCollapseIcon: {
|
||||
color: theme.palette.text.secondary,
|
||||
fontSize: "1.5em",
|
||||
verticalAlign: "middle",
|
||||
},
|
||||
extraInfo: {
|
||||
fontFamily: "SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace",
|
||||
whiteSpace: "pre",
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
||||
type ArrayType<T> = T extends Array<infer U> ? U : never;
|
||||
type Node = ArrayType<NodeInfoResponse["clients"]>;
|
||||
|
||||
type NodeRowGroupProps = {
|
||||
features: NodeInfoFeature[];
|
||||
node: Node;
|
||||
rayletInfo?: string;
|
||||
plasmaStats?: PlasmaStats;
|
||||
workerFeatureData: WorkerFeatureData[];
|
||||
initialExpanded: boolean;
|
||||
};
|
||||
|
||||
const NodeRowGroup: React.FC<NodeRowGroupProps> = ({
|
||||
features,
|
||||
node,
|
||||
initialExpanded,
|
||||
rayletInfo,
|
||||
workerFeatureData,
|
||||
plasmaStats,
|
||||
}) => {
|
||||
const [expanded, setExpanded] = useState<boolean>(initialExpanded);
|
||||
const toggleExpand = () => setExpanded(!expanded);
|
||||
const classes = useNodeRowGroupStyles();
|
||||
const renderedNodeFeatures = features.map((nodeInfoFeature, i) => {
|
||||
const FeatureComponent = nodeInfoFeature.NodeFeatureRenderFn;
|
||||
return (
|
||||
<StyledTableCell className={classes.cell} key={i}>
|
||||
<FeatureComponent node={node} plasmaStats={plasmaStats} />
|
||||
</StyledTableCell>
|
||||
);
|
||||
});
|
||||
return (
|
||||
<React.Fragment>
|
||||
<TableRow hover>
|
||||
<TableCell
|
||||
className={classNames(classes.cell, classes.expandCollapseCell)}
|
||||
onClick={toggleExpand}
|
||||
>
|
||||
{!expanded ? (
|
||||
<AddIcon className={classes.expandCollapseIcon} />
|
||||
) : (
|
||||
<RemoveIcon className={classes.expandCollapseIcon} />
|
||||
)}
|
||||
</TableCell>
|
||||
{renderedNodeFeatures}
|
||||
</TableRow>
|
||||
{expanded && (
|
||||
<React.Fragment>
|
||||
{rayletInfo !== undefined && (
|
||||
<TableRow hover>
|
||||
<TableCell className={classes.cell} />
|
||||
<TableCell
|
||||
className={classNames(classes.cell, classes.extraInfo)}
|
||||
colSpan={features.length}
|
||||
>
|
||||
{rayletInfo}
|
||||
</TableCell>
|
||||
</TableRow>
|
||||
)}
|
||||
{workerFeatureData.map((featureData, index: number) => {
|
||||
return (
|
||||
<NodeWorkerRow
|
||||
key={index}
|
||||
features={features.map(
|
||||
(feature) => feature.WorkerFeatureRenderFn,
|
||||
)}
|
||||
data={featureData}
|
||||
/>
|
||||
);
|
||||
})}
|
||||
</React.Fragment>
|
||||
)}
|
||||
</React.Fragment>
|
||||
);
|
||||
};
|
||||
|
||||
export default NodeRowGroup;
|
||||
@@ -1,30 +0,0 @@
|
||||
import { TableRow } from "@material-ui/core";
|
||||
import React from "react";
|
||||
import { StyledTableCell } from "../../../common/TableCell";
|
||||
import { WorkerFeatureData, WorkerFeatureRenderFn } from "./features/types";
|
||||
|
||||
type NodeWorkerRowProps = {
|
||||
features: WorkerFeatureRenderFn[];
|
||||
data: WorkerFeatureData;
|
||||
};
|
||||
|
||||
export const NodeWorkerRow: React.FC<NodeWorkerRowProps> = ({
|
||||
features,
|
||||
data,
|
||||
}) => {
|
||||
const { node, worker, rayletWorker } = data;
|
||||
return (
|
||||
<TableRow hover>
|
||||
<StyledTableCell />
|
||||
{features.map((WorkerFeature, index) => (
|
||||
<StyledTableCell key={index}>
|
||||
<WorkerFeature
|
||||
node={node}
|
||||
worker={worker}
|
||||
rayletWorker={rayletWorker}
|
||||
/>
|
||||
</StyledTableCell>
|
||||
))}
|
||||
</TableRow>
|
||||
);
|
||||
};
|
||||
@@ -1,65 +0,0 @@
|
||||
import {
|
||||
createStyles,
|
||||
makeStyles,
|
||||
TableCell,
|
||||
TableRow,
|
||||
Theme,
|
||||
} from "@material-ui/core";
|
||||
import LayersIcon from "@material-ui/icons/Layers";
|
||||
import React from "react";
|
||||
import { NodeInfoResponse, PlasmaStats } from "../../../api";
|
||||
import { StyledTableCell } from "../../../common/TableCell";
|
||||
import { ClusterFeatureRenderFn } from "./features/types";
|
||||
|
||||
const useTotalRowStyles = makeStyles((theme: Theme) =>
|
||||
createStyles({
|
||||
cell: {
|
||||
borderTopColor: theme.palette.divider,
|
||||
borderTopStyle: "solid",
|
||||
borderTopWidth: 2,
|
||||
padding: theme.spacing(1),
|
||||
textAlign: "center",
|
||||
"&:last-child": {
|
||||
paddingRight: theme.spacing(1),
|
||||
},
|
||||
},
|
||||
totalIcon: {
|
||||
color: theme.palette.text.secondary,
|
||||
fontSize: "1.5em",
|
||||
verticalAlign: "middle",
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
||||
type TotalRowProps = {
|
||||
nodes: NodeInfoResponse["clients"];
|
||||
plasmaStats: PlasmaStats[];
|
||||
clusterTotalWorkers: number;
|
||||
features: (ClusterFeatureRenderFn | undefined)[];
|
||||
};
|
||||
|
||||
const TotalRow: React.FC<TotalRowProps> = ({
|
||||
nodes,
|
||||
features,
|
||||
plasmaStats,
|
||||
}) => {
|
||||
const classes = useTotalRowStyles();
|
||||
return (
|
||||
<TableRow hover>
|
||||
<TableCell className={classes.cell}>
|
||||
<LayersIcon className={classes.totalIcon} />
|
||||
</TableCell>
|
||||
{features.map((ClusterFeature, index) =>
|
||||
ClusterFeature ? (
|
||||
<TableCell className={classes.cell} key={index}>
|
||||
<ClusterFeature nodes={nodes} plasmaStats={plasmaStats} />
|
||||
</TableCell>
|
||||
) : (
|
||||
<StyledTableCell key={index} />
|
||||
),
|
||||
)}
|
||||
</TableRow>
|
||||
);
|
||||
};
|
||||
|
||||
export default TotalRow;
|
||||
@@ -1,98 +0,0 @@
|
||||
import {
|
||||
createStyles,
|
||||
fade,
|
||||
Theme,
|
||||
Typography,
|
||||
withStyles,
|
||||
WithStyles,
|
||||
} from "@material-ui/core";
|
||||
import React from "react";
|
||||
import { ErrorsResponse, getErrors } from "../../../../../api";
|
||||
import DialogWithTitle from "../../../../../common/DialogWithTitle";
|
||||
import NumberedLines from "../../../../../common/NumberedLines";
|
||||
|
||||
const styles = (theme: Theme) =>
|
||||
createStyles({
|
||||
header: {
|
||||
lineHeight: 1,
|
||||
marginBottom: theme.spacing(3),
|
||||
marginTop: theme.spacing(3),
|
||||
},
|
||||
error: {
|
||||
backgroundColor: fade(theme.palette.error.main, 0.04),
|
||||
borderLeftColor: theme.palette.error.main,
|
||||
borderLeftStyle: "solid",
|
||||
borderLeftWidth: 2,
|
||||
marginTop: theme.spacing(3),
|
||||
padding: theme.spacing(2),
|
||||
},
|
||||
timestamp: {
|
||||
color: theme.palette.text.secondary,
|
||||
marginBottom: theme.spacing(1),
|
||||
},
|
||||
});
|
||||
|
||||
type Props = {
|
||||
clearErrorDialog: () => void;
|
||||
hostname: string;
|
||||
pid: number | null;
|
||||
};
|
||||
|
||||
type State = {
|
||||
result: ErrorsResponse | null;
|
||||
error: string | null;
|
||||
};
|
||||
|
||||
class Errors extends React.Component<Props & WithStyles<typeof styles>, State> {
|
||||
state: State = {
|
||||
result: null,
|
||||
error: null,
|
||||
};
|
||||
|
||||
async componentDidMount() {
|
||||
try {
|
||||
const { hostname, pid } = this.props;
|
||||
const result = await getErrors(hostname, pid);
|
||||
this.setState({ result, error: null });
|
||||
} catch (error) {
|
||||
this.setState({ result: null, error: error.toString() });
|
||||
}
|
||||
}
|
||||
|
||||
render() {
|
||||
const { classes, clearErrorDialog, hostname } = this.props;
|
||||
const { result, error } = this.state;
|
||||
|
||||
return (
|
||||
<DialogWithTitle handleClose={clearErrorDialog} title="Errors">
|
||||
{error !== null ? (
|
||||
<Typography color="error">{error}</Typography>
|
||||
) : result === null ? (
|
||||
<Typography color="textSecondary">Loading...</Typography>
|
||||
) : (
|
||||
Object.entries(result).map(([pid, errors]) => (
|
||||
<React.Fragment key={pid}>
|
||||
<Typography className={classes.header}>
|
||||
{hostname} (PID: {pid})
|
||||
</Typography>
|
||||
{errors.length > 0 ? (
|
||||
errors.map(({ message, timestamp }, index) => (
|
||||
<div className={classes.error} key={index}>
|
||||
<Typography className={classes.timestamp}>
|
||||
Error at {new Date(timestamp * 1000).toLocaleString()}
|
||||
</Typography>
|
||||
<NumberedLines lines={message.trim().split("\n")} />
|
||||
</div>
|
||||
))
|
||||
) : (
|
||||
<Typography color="textSecondary">No errors found.</Typography>
|
||||
)}
|
||||
</React.Fragment>
|
||||
))
|
||||
)}
|
||||
</DialogWithTitle>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default withStyles(styles)(Errors);
|
||||
@@ -1,88 +0,0 @@
|
||||
import {
|
||||
createStyles,
|
||||
fade,
|
||||
Theme,
|
||||
Typography,
|
||||
WithStyles,
|
||||
withStyles,
|
||||
} from "@material-ui/core";
|
||||
import React from "react";
|
||||
import { getLogs, LogsResponse } from "../../../../../api";
|
||||
import DialogWithTitle from "../../../../../common/DialogWithTitle";
|
||||
import NumberedLines from "../../../../../common/NumberedLines";
|
||||
|
||||
const styles = (theme: Theme) =>
|
||||
createStyles({
|
||||
header: {
|
||||
lineHeight: 1,
|
||||
marginBottom: theme.spacing(3),
|
||||
marginTop: theme.spacing(3),
|
||||
},
|
||||
log: {
|
||||
backgroundColor: fade(theme.palette.primary.main, 0.04),
|
||||
borderLeftColor: theme.palette.primary.main,
|
||||
borderLeftStyle: "solid",
|
||||
borderLeftWidth: 2,
|
||||
padding: theme.spacing(2),
|
||||
},
|
||||
});
|
||||
|
||||
type Props = {
|
||||
clearLogDialog: () => void;
|
||||
hostname: string;
|
||||
pid: number | null;
|
||||
};
|
||||
|
||||
type State = {
|
||||
result: LogsResponse | null;
|
||||
error: string | null;
|
||||
};
|
||||
|
||||
class Logs extends React.Component<Props & WithStyles<typeof styles>, State> {
|
||||
state: State = {
|
||||
result: null,
|
||||
error: null,
|
||||
};
|
||||
|
||||
async componentDidMount() {
|
||||
try {
|
||||
const { hostname, pid } = this.props;
|
||||
const result = await getLogs(hostname, pid);
|
||||
this.setState({ result, error: null });
|
||||
} catch (error) {
|
||||
this.setState({ result: null, error: error.toString() });
|
||||
}
|
||||
}
|
||||
|
||||
render() {
|
||||
const { classes, clearLogDialog, hostname } = this.props;
|
||||
const { result, error } = this.state;
|
||||
|
||||
return (
|
||||
<DialogWithTitle handleClose={clearLogDialog} title="Logs">
|
||||
{error !== null ? (
|
||||
<Typography color="error">{error}</Typography>
|
||||
) : result === null ? (
|
||||
<Typography color="textSecondary">Loading...</Typography>
|
||||
) : (
|
||||
Object.entries(result).map(([pid, lines]) => (
|
||||
<React.Fragment key={pid}>
|
||||
<Typography className={classes.header}>
|
||||
{hostname} (PID: {pid})
|
||||
</Typography>
|
||||
{lines.length > 0 ? (
|
||||
<div className={classes.log}>
|
||||
<NumberedLines lines={lines} />
|
||||
</div>
|
||||
) : (
|
||||
<Typography color="textSecondary">No logs found.</Typography>
|
||||
)}
|
||||
</React.Fragment>
|
||||
))
|
||||
)}
|
||||
</DialogWithTitle>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default withStyles(styles)(Logs);
|
||||
@@ -1,59 +0,0 @@
|
||||
import React from "react";
|
||||
import { Accessor } from "../../../../common/tableUtils";
|
||||
import UsageBar from "../../../../common/UsageBar";
|
||||
import { getWeightedAverage } from "../../../../common/util";
|
||||
import {
|
||||
ClusterFeatureRenderFn,
|
||||
NodeFeatureData,
|
||||
NodeFeatureRenderFn,
|
||||
NodeInfoFeature,
|
||||
WorkerFeatureData,
|
||||
WorkerFeatureRenderFn,
|
||||
} from "./types";
|
||||
|
||||
export const ClusterCPU: ClusterFeatureRenderFn = ({ nodes }) => {
|
||||
const cpuWeightedAverage = getWeightedAverage(
|
||||
nodes.map((node) => ({ weight: node.cpus[0], value: node.cpu })),
|
||||
);
|
||||
return (
|
||||
<div style={{ minWidth: 60 }}>
|
||||
<UsageBar
|
||||
percent={cpuWeightedAverage}
|
||||
text={`${cpuWeightedAverage.toFixed(1)}%`}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export const NodeCPU: NodeFeatureRenderFn = ({ node }) => (
|
||||
<div style={{ minWidth: 60 }}>
|
||||
<UsageBar percent={node.cpu} text={`${node.cpu.toFixed(1)}%`} />
|
||||
</div>
|
||||
);
|
||||
export const nodeCPUAccessor: Accessor<NodeFeatureData> = ({ node }) => {
|
||||
return node.cpu;
|
||||
};
|
||||
|
||||
export const WorkerCPU: WorkerFeatureRenderFn = ({ worker }) => (
|
||||
<div style={{ minWidth: 60 }}>
|
||||
<UsageBar
|
||||
percent={worker.cpu_percent}
|
||||
text={`${worker.cpu_percent.toFixed(1)}%`}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
|
||||
export const workerCPUAccessor: Accessor<WorkerFeatureData> = ({ worker }) => {
|
||||
return worker.cpu_percent;
|
||||
};
|
||||
|
||||
const cpuFeature: NodeInfoFeature = {
|
||||
id: "cpu",
|
||||
ClusterFeatureRenderFn: ClusterCPU,
|
||||
NodeFeatureRenderFn: NodeCPU,
|
||||
WorkerFeatureRenderFn: WorkerCPU,
|
||||
nodeAccessor: nodeCPUAccessor,
|
||||
workerAccessor: workerCPUAccessor,
|
||||
};
|
||||
|
||||
export default cpuFeature;
|
||||
@@ -1,60 +0,0 @@
|
||||
import { Typography } from "@material-ui/core";
|
||||
import React from "react";
|
||||
import { formatUsage } from "../../../../common/formatUtils";
|
||||
import { Accessor } from "../../../../common/tableUtils";
|
||||
import UsageBar from "../../../../common/UsageBar";
|
||||
import {
|
||||
ClusterFeatureRenderFn,
|
||||
NodeFeatureData,
|
||||
NodeFeatureRenderFn,
|
||||
NodeInfoFeature,
|
||||
WorkerFeatureRenderFn,
|
||||
} from "./types";
|
||||
|
||||
export const ClusterDisk: ClusterFeatureRenderFn = ({ nodes }) => {
|
||||
let used = 0;
|
||||
let total = 0;
|
||||
for (const node of nodes) {
|
||||
if ("/" in node.disk) {
|
||||
used += node.disk["/"].used;
|
||||
total += node.disk["/"].total;
|
||||
}
|
||||
}
|
||||
return (
|
||||
<UsageBar
|
||||
percent={(100 * used) / total}
|
||||
text={formatUsage(used, total, "gibibyte", true)}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
export const NodeDisk: NodeFeatureRenderFn = ({ node }) => (
|
||||
<UsageBar
|
||||
percent={(100 * node.disk["/"].used) / node.disk["/"].total}
|
||||
text={formatUsage(
|
||||
node.disk["/"].used,
|
||||
node.disk["/"].total,
|
||||
"gibibyte",
|
||||
true,
|
||||
)}
|
||||
/>
|
||||
);
|
||||
|
||||
export const nodeDiskAccessor: Accessor<NodeFeatureData> = ({ node }) =>
|
||||
node.disk["/"].used;
|
||||
|
||||
export const WorkerDisk: WorkerFeatureRenderFn = () => (
|
||||
<Typography color="textSecondary" component="span" variant="inherit">
|
||||
N/A
|
||||
</Typography>
|
||||
);
|
||||
|
||||
const diskFeature: NodeInfoFeature = {
|
||||
id: "disk",
|
||||
ClusterFeatureRenderFn: ClusterDisk,
|
||||
NodeFeatureRenderFn: NodeDisk,
|
||||
WorkerFeatureRenderFn: WorkerDisk,
|
||||
nodeAccessor: nodeDiskAccessor,
|
||||
};
|
||||
|
||||
export default diskFeature;
|
||||
@@ -1,80 +0,0 @@
|
||||
import { Typography } from "@material-ui/core";
|
||||
import React from "react";
|
||||
import SpanButton from "../../../../common/SpanButton";
|
||||
import { Accessor } from "../../../../common/tableUtils";
|
||||
import { sum } from "../../../../common/util";
|
||||
import {
|
||||
ClusterFeatureRenderFn,
|
||||
Node,
|
||||
NodeFeatureData,
|
||||
NodeFeatureRenderFn,
|
||||
NodeInfoFeature,
|
||||
WorkerFeatureData,
|
||||
WorkerFeatureRenderFn,
|
||||
} from "./types";
|
||||
|
||||
const nodeErrCount = (node: Node) =>
|
||||
node.error_count ? sum(Object.values(node.error_count)) : 0;
|
||||
|
||||
const ClusterErrors: ClusterFeatureRenderFn = ({ nodes }) => {
|
||||
const totalErrCount = sum(nodes.map(nodeErrCount));
|
||||
return totalErrCount === 0 ? (
|
||||
<Typography color="textSecondary" component="span" variant="inherit">
|
||||
No errors
|
||||
</Typography>
|
||||
) : (
|
||||
<React.Fragment>
|
||||
{totalErrCount.toLocaleString()}{" "}
|
||||
{totalErrCount === 1 ? "error" : "errors"}
|
||||
</React.Fragment>
|
||||
);
|
||||
};
|
||||
|
||||
const makeNodeErrors = (
|
||||
setErrorDialog: (hostname: string, pid: number | null) => void,
|
||||
): NodeFeatureRenderFn => ({ node }) => {
|
||||
const nodeErrorCount = nodeErrCount(node);
|
||||
return nodeErrorCount === 0 ? (
|
||||
<Typography color="textSecondary" component="span" variant="inherit">
|
||||
No errors
|
||||
</Typography>
|
||||
) : (
|
||||
<SpanButton onClick={() => setErrorDialog(node.hostname, null)}>
|
||||
View all errors ({nodeErrorCount.toLocaleString()})
|
||||
</SpanButton>
|
||||
);
|
||||
};
|
||||
|
||||
const nodeErrorsAccessor: Accessor<NodeFeatureData> = ({ node }) =>
|
||||
nodeErrCount(node);
|
||||
|
||||
const makeWorkerErrors = (
|
||||
setErrorDialog: (hostname: string, pid: number | null) => void,
|
||||
): WorkerFeatureRenderFn => ({ node, worker }) => {
|
||||
const workerErrorCount = node.error_count?.[worker.pid] || 0;
|
||||
return workerErrorCount !== 0 ? (
|
||||
<SpanButton onClick={() => setErrorDialog(node.hostname, worker.pid)}>
|
||||
View errors ({workerErrorCount.toLocaleString()})
|
||||
</SpanButton>
|
||||
) : (
|
||||
<Typography color="textSecondary" component="span" variant="inherit">
|
||||
No errors
|
||||
</Typography>
|
||||
);
|
||||
};
|
||||
|
||||
const workerErrorsAccessor: Accessor<WorkerFeatureData> = ({ node, worker }) =>
|
||||
node.error_count?.[worker.pid] || 0;
|
||||
|
||||
const makeErrorsFeature = (
|
||||
setErrorDialog: (hostname: string, pid: number | null) => void,
|
||||
): NodeInfoFeature => ({
|
||||
id: "errors",
|
||||
ClusterFeatureRenderFn: ClusterErrors,
|
||||
WorkerFeatureRenderFn: makeWorkerErrors(setErrorDialog),
|
||||
NodeFeatureRenderFn: makeNodeErrors(setErrorDialog),
|
||||
nodeAccessor: nodeErrorsAccessor,
|
||||
workerAccessor: workerErrorsAccessor,
|
||||
});
|
||||
|
||||
export default makeErrorsFeature;
|
||||
@@ -1,176 +0,0 @@
|
||||
import { Box, Tooltip, Typography } from "@material-ui/core";
|
||||
import React from "react";
|
||||
import { GPUStats, RayletWorkerStats, ResourceSlot } from "../../../../api";
|
||||
import { RightPaddedTypography } from "../../../../common/CustomTypography";
|
||||
import { Accessor } from "../../../../common/tableUtils";
|
||||
|
||||
import UsageBar from "../../../../common/UsageBar";
|
||||
import { getWeightedAverage, sum } from "../../../../common/util";
|
||||
import {
|
||||
ClusterFeatureRenderFn,
|
||||
Node,
|
||||
NodeFeatureData,
|
||||
NodeFeatureRenderFn,
|
||||
NodeInfoFeature,
|
||||
WorkerFeatureData,
|
||||
WorkerFeatureRenderFn,
|
||||
} from "./types";
|
||||
|
||||
const GPU_COL_WIDTH = 120;
|
||||
|
||||
const clusterGPUUtilization = (nodes: Array<Node>): number => {
|
||||
const utils = nodes
|
||||
.map((node) => ({
|
||||
weight: node.gpus.length,
|
||||
value: nodeGPUUtilization(node),
|
||||
}))
|
||||
.filter((util) => !isNaN(util.value));
|
||||
if (utils.length === 0) {
|
||||
return NaN;
|
||||
}
|
||||
return getWeightedAverage(utils);
|
||||
};
|
||||
|
||||
const nodeGPUUtilization = (node: Node): number => {
|
||||
if (!node.gpus || node.gpus.length === 0) {
|
||||
return NaN;
|
||||
}
|
||||
const utilizationSum = sum(node.gpus.map((gpu) => gpu.utilization_gpu));
|
||||
const avgUtilization = utilizationSum / node.gpus.length;
|
||||
return avgUtilization;
|
||||
};
|
||||
|
||||
const nodeGPUAccessor: Accessor<NodeFeatureData> = ({ node }) =>
|
||||
nodeGPUUtilization(node);
|
||||
|
||||
const ClusterGPU: ClusterFeatureRenderFn = ({ nodes }) => {
|
||||
const clusterAverageUtilization = clusterGPUUtilization(nodes);
|
||||
return (
|
||||
<div style={{ minWidth: GPU_COL_WIDTH }}>
|
||||
{isNaN(clusterAverageUtilization) ? (
|
||||
<Typography color="textSecondary" component="span" variant="inherit">
|
||||
N/A
|
||||
</Typography>
|
||||
) : (
|
||||
<UsageBar
|
||||
percent={clusterAverageUtilization}
|
||||
text={`${clusterAverageUtilization.toFixed(1)}%`}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
const NodeGPU: NodeFeatureRenderFn = ({ node }) => {
|
||||
const hasGPU = node.gpus !== undefined && node.gpus.length !== 0;
|
||||
return (
|
||||
<div style={{ minWidth: GPU_COL_WIDTH }}>
|
||||
{hasGPU ? (
|
||||
node.gpus.map((gpu, i) => <NodeGPUEntry gpu={gpu} slot={i} />)
|
||||
) : (
|
||||
<Typography color="textSecondary" component="span" variant="inherit">
|
||||
N/A
|
||||
</Typography>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
type NodeGPUEntryProps = {
|
||||
slot: number;
|
||||
gpu: GPUStats;
|
||||
};
|
||||
|
||||
const NodeGPUEntry: React.FC<NodeGPUEntryProps> = ({ gpu, slot }) => {
|
||||
return (
|
||||
<Box display="flex" style={{ minWidth: GPU_COL_WIDTH }}>
|
||||
<Tooltip title={gpu.name}>
|
||||
<RightPaddedTypography variant="body1">[{slot}]:</RightPaddedTypography>
|
||||
</Tooltip>
|
||||
<UsageBar
|
||||
percent={gpu.utilization_gpu}
|
||||
text={`${gpu.utilization_gpu.toFixed(1)}%`}
|
||||
/>
|
||||
</Box>
|
||||
);
|
||||
};
|
||||
|
||||
type WorkerGPUEntryProps = {
|
||||
resourceSlot: ResourceSlot;
|
||||
};
|
||||
|
||||
const WorkerGPUEntry: React.FC<WorkerGPUEntryProps> = ({ resourceSlot }) => {
|
||||
const { allocation, slot } = resourceSlot;
|
||||
// This is a bit of a dirty hack . For some reason, the slot GPU slot
|
||||
// 0 as assigned always shows up as undefined in the API response.
|
||||
// There are other times, such as a partial allocation, where we truly don't
|
||||
// know the slot, however this will just plug the hole of 0s coming through
|
||||
// as undefined. I have not been able to figure out the root cause.
|
||||
const slotMsg =
|
||||
allocation >= 1 && slot === undefined
|
||||
? "0"
|
||||
: slot === undefined
|
||||
? "?"
|
||||
: slot.toString();
|
||||
return (
|
||||
<Typography variant="body1">
|
||||
[{slotMsg}]: {allocation}
|
||||
</Typography>
|
||||
);
|
||||
};
|
||||
|
||||
const WorkerGPU: WorkerFeatureRenderFn = ({ rayletWorker }) => {
|
||||
const workerRes = rayletWorker?.coreWorkerStats.usedResources;
|
||||
const workerUsedGPUResources = workerRes?.["GPU"];
|
||||
let message;
|
||||
if (workerUsedGPUResources === undefined) {
|
||||
message = (
|
||||
<Typography color="textSecondary" component="span" variant="inherit">
|
||||
N/A
|
||||
</Typography>
|
||||
);
|
||||
} else {
|
||||
message = workerUsedGPUResources.resourceSlots
|
||||
.sort((slot1, slot2) => {
|
||||
if (slot1.slot === undefined && slot2.slot === undefined) {
|
||||
return 0;
|
||||
} else if (slot1.slot === undefined) {
|
||||
return 1;
|
||||
} else if (slot2.slot === undefined) {
|
||||
return -1;
|
||||
} else {
|
||||
return slot1.slot - slot2.slot;
|
||||
}
|
||||
})
|
||||
.map((resourceSlot) => <WorkerGPUEntry resourceSlot={resourceSlot} />);
|
||||
}
|
||||
return <div style={{ minWidth: 60 }}>{message}</div>;
|
||||
};
|
||||
|
||||
const workerGPUUtilization = (rayletWorker: RayletWorkerStats | null) => {
|
||||
const workerRes = rayletWorker?.coreWorkerStats.usedResources;
|
||||
const workerUsedGPUResources = workerRes?.["GPU"];
|
||||
return (
|
||||
workerUsedGPUResources &&
|
||||
sum(
|
||||
workerUsedGPUResources.resourceSlots.map(
|
||||
(resourceSlot) => resourceSlot.allocation,
|
||||
),
|
||||
)
|
||||
);
|
||||
};
|
||||
|
||||
const workerGPUAccessor: Accessor<WorkerFeatureData> = ({ rayletWorker }) => {
|
||||
return workerGPUUtilization(rayletWorker) ?? 0;
|
||||
};
|
||||
|
||||
const gpuFeature: NodeInfoFeature = {
|
||||
id: "gpu",
|
||||
ClusterFeatureRenderFn: ClusterGPU,
|
||||
NodeFeatureRenderFn: NodeGPU,
|
||||
WorkerFeatureRenderFn: WorkerGPU,
|
||||
nodeAccessor: nodeGPUAccessor,
|
||||
workerAccessor: workerGPUAccessor,
|
||||
};
|
||||
|
||||
export default gpuFeature;
|
||||
@@ -1,172 +0,0 @@
|
||||
import { Box, Tooltip, Typography } from "@material-ui/core";
|
||||
import React from "react";
|
||||
import { GPUStats } from "../../../../api";
|
||||
import { RightPaddedTypography } from "../../../../common/CustomTypography";
|
||||
import { MiBRatioNoPercent } from "../../../../common/formatUtils";
|
||||
import { Accessor } from "../../../../common/tableUtils";
|
||||
import UsageBar from "../../../../common/UsageBar";
|
||||
import { getWeightedAverage, sum } from "../../../../common/util";
|
||||
import {
|
||||
ClusterFeatureRenderFn,
|
||||
Node,
|
||||
NodeFeatureData,
|
||||
NodeFeatureRenderFn,
|
||||
NodeInfoFeature,
|
||||
WorkerFeatureData,
|
||||
WorkerFeatureRenderFn,
|
||||
} from "./types";
|
||||
|
||||
const GRAM_COL_WIDTH = 120;
|
||||
|
||||
const nodeGRAMUtilization = (node: Node) => {
|
||||
const utilization = (gpu: GPUStats) => gpu.memory_used / gpu.memory_total;
|
||||
if (node.gpus.length === 0) {
|
||||
return NaN;
|
||||
}
|
||||
const utilizationSum = sum(node.gpus.map((gpu) => utilization(gpu)));
|
||||
const avgUtilization = utilizationSum / node.gpus.length;
|
||||
// Convert to a percent before returning
|
||||
return avgUtilization * 100;
|
||||
};
|
||||
|
||||
const nodeGRAMAccessor: Accessor<NodeFeatureData> = ({ node }) => {
|
||||
const nodeGRAMUtil = nodeGRAMUtilization(node);
|
||||
return isNaN(nodeGRAMUtil) ? -1 : nodeGRAMUtil;
|
||||
};
|
||||
|
||||
const clusterGRAMUtilization = (nodes: Array<Node>) => {
|
||||
const utils = nodes
|
||||
.map((node) => ({
|
||||
weight: node.gpus.length,
|
||||
value: nodeGRAMUtilization(node),
|
||||
}))
|
||||
.filter((util) => !isNaN(util.value));
|
||||
if (utils.length === 0) {
|
||||
return NaN;
|
||||
}
|
||||
return getWeightedAverage(utils);
|
||||
};
|
||||
|
||||
export const ClusterGRAM: ClusterFeatureRenderFn = ({ nodes }) => {
|
||||
const clusterAverageUtilization = clusterGRAMUtilization(nodes);
|
||||
return (
|
||||
<div style={{ minWidth: 60 }}>
|
||||
{isNaN(clusterAverageUtilization) ? (
|
||||
<Typography color="textSecondary" component="span" variant="inherit">
|
||||
N/A
|
||||
</Typography>
|
||||
) : (
|
||||
<UsageBar
|
||||
percent={clusterAverageUtilization}
|
||||
text={`${clusterAverageUtilization.toFixed(1)}%`}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export const NodeGRAM: NodeFeatureRenderFn = ({ node }) => {
|
||||
const nodeGRAMEntries = node.gpus.map((gpu, i) => {
|
||||
const props = {
|
||||
gpuName: gpu.name,
|
||||
utilization: gpu.memory_used,
|
||||
total: gpu.memory_total,
|
||||
slot: i,
|
||||
};
|
||||
return <GRAMEntry {...props} />;
|
||||
});
|
||||
return (
|
||||
<div style={{ minWidth: 60 }}>
|
||||
{nodeGRAMEntries.length === 0 ? (
|
||||
<Typography color="textSecondary" component="span" variant="inherit">
|
||||
N/A
|
||||
</Typography>
|
||||
) : (
|
||||
<div style={{ minWidth: GRAM_COL_WIDTH }}>{nodeGRAMEntries}</div>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
type GRAMEntryProps = {
|
||||
gpuName: string;
|
||||
slot: number;
|
||||
utilization: number;
|
||||
total: number;
|
||||
};
|
||||
|
||||
const GRAMEntry: React.FC<GRAMEntryProps> = ({
|
||||
gpuName,
|
||||
slot,
|
||||
utilization,
|
||||
total,
|
||||
}) => {
|
||||
const ratioStr = MiBRatioNoPercent(utilization, total);
|
||||
return (
|
||||
<Box display="flex" style={{ minWidth: GRAM_COL_WIDTH }}>
|
||||
<Tooltip title={gpuName}>
|
||||
<RightPaddedTypography variant="body1">
|
||||
[{slot}]: {ratioStr}
|
||||
</RightPaddedTypography>
|
||||
</Tooltip>
|
||||
</Box>
|
||||
);
|
||||
};
|
||||
|
||||
export const WorkerGRAM: WorkerFeatureRenderFn = ({ worker, node }) => {
|
||||
const workerGRAMEntries = node.gpus
|
||||
.map((gpu, i) => {
|
||||
const process = gpu.processes.find(
|
||||
(process) => process.pid === worker.pid,
|
||||
);
|
||||
if (!process) {
|
||||
return undefined;
|
||||
}
|
||||
const props = {
|
||||
gpuName: gpu.name,
|
||||
total: gpu.memory_total,
|
||||
utilization: process.gpu_memory_usage,
|
||||
slot: i,
|
||||
};
|
||||
return <GRAMEntry {...props} />;
|
||||
})
|
||||
.filter((entry) => entry !== undefined);
|
||||
|
||||
return workerGRAMEntries.length === 0 ? (
|
||||
<Typography color="textSecondary" component="span" variant="inherit">
|
||||
N/A
|
||||
</Typography>
|
||||
) : (
|
||||
<div style={{ minWidth: GRAM_COL_WIDTH }}>{workerGRAMEntries}</div>
|
||||
);
|
||||
};
|
||||
|
||||
const workerGRAMUtilization = (worker: any, node: Node) => {
|
||||
const workerProcessPerGPU = node.gpus
|
||||
.map((gpu) => gpu.processes)
|
||||
.map((processes) =>
|
||||
processes.find((process) => process.pid === worker.pid),
|
||||
);
|
||||
const workerUtilPerGPU = workerProcessPerGPU.map(
|
||||
(proc) => proc?.gpu_memory_usage || 0,
|
||||
);
|
||||
return sum(workerUtilPerGPU);
|
||||
};
|
||||
|
||||
const workerGRAMAccessor: Accessor<WorkerFeatureData> = ({ worker, node }) => {
|
||||
if (node.gpus.length === 0) {
|
||||
return -1;
|
||||
}
|
||||
return workerGRAMUtilization(worker, node);
|
||||
};
|
||||
|
||||
const gramFeature: NodeInfoFeature = {
|
||||
id: "gram",
|
||||
ClusterFeatureRenderFn: ClusterGRAM,
|
||||
NodeFeatureRenderFn: NodeGRAM,
|
||||
WorkerFeatureRenderFn: WorkerGRAM,
|
||||
nodeAccessor: nodeGRAMAccessor,
|
||||
workerAccessor: workerGRAMAccessor,
|
||||
};
|
||||
|
||||
export default gramFeature;
|
||||
@@ -1,45 +0,0 @@
|
||||
import React from "react";
|
||||
import { Accessor } from "../../../../common/tableUtils";
|
||||
import {
|
||||
ClusterFeatureRenderFn,
|
||||
NodeFeatureData,
|
||||
NodeFeatureRenderFn,
|
||||
NodeInfoFeature,
|
||||
WorkerFeatureRenderFn,
|
||||
} from "./types";
|
||||
|
||||
export const ClusterHost: ClusterFeatureRenderFn = ({ nodes }) => (
|
||||
<React.Fragment>
|
||||
Totals ({nodes.length.toLocaleString()}{" "}
|
||||
{nodes.length === 1 ? "host" : "hosts"})
|
||||
</React.Fragment>
|
||||
);
|
||||
|
||||
export const NodeHost: NodeFeatureRenderFn = ({ node }) => (
|
||||
<React.Fragment>
|
||||
{node.hostname} ({node.ip})
|
||||
</React.Fragment>
|
||||
);
|
||||
|
||||
export const nodeHostAccessor: Accessor<NodeFeatureData> = ({ node }) =>
|
||||
node.hostname;
|
||||
|
||||
// Ray worker process titles have one of the following forms: `ray::IDLE`,
|
||||
// `ray::function()`, `ray::Class`, or `ray::Class.method()`. We extract the
|
||||
// first portion here for display in the "Host" column. Note that this will
|
||||
// always be `ray` under the current setup, but it may vary in the future.
|
||||
export const WorkerHost: WorkerFeatureRenderFn = ({ worker }) => (
|
||||
<React.Fragment>
|
||||
{worker.cmdline[0].split("::", 2)[0]} (PID: {worker.pid})
|
||||
</React.Fragment>
|
||||
);
|
||||
|
||||
const hostFeature: NodeInfoFeature = {
|
||||
id: "host",
|
||||
ClusterFeatureRenderFn: ClusterHost,
|
||||
NodeFeatureRenderFn: NodeHost,
|
||||
WorkerFeatureRenderFn: WorkerHost,
|
||||
nodeAccessor: nodeHostAccessor,
|
||||
};
|
||||
|
||||
export default hostFeature;
|
||||
@@ -1,83 +0,0 @@
|
||||
import { Typography } from "@material-ui/core";
|
||||
import React from "react";
|
||||
import SpanButton from "../../../../common/SpanButton";
|
||||
import { Accessor } from "../../../../common/tableUtils";
|
||||
import { sum } from "../../../../common/util";
|
||||
import {
|
||||
ClusterFeatureRenderFn,
|
||||
Node,
|
||||
NodeFeatureData,
|
||||
NodeFeatureRenderFn,
|
||||
NodeInfoFeature,
|
||||
WorkerFeatureData,
|
||||
WorkerFeatureRenderFn,
|
||||
} from "./types";
|
||||
|
||||
const nodeLogCount = (node: Node) =>
|
||||
node.log_count ? sum(Object.values(node.log_count)) : 0;
|
||||
|
||||
const ClusterLogs: ClusterFeatureRenderFn = ({ nodes }) => {
|
||||
const totalLogCount = sum(nodes.map(nodeLogCount));
|
||||
return totalLogCount === 0 ? (
|
||||
<Typography color="textSecondary" component="span" variant="inherit">
|
||||
No logs
|
||||
</Typography>
|
||||
) : (
|
||||
<React.Fragment>
|
||||
{totalLogCount.toLocaleString()} {totalLogCount === 1 ? "line" : "lines"}
|
||||
</React.Fragment>
|
||||
);
|
||||
};
|
||||
|
||||
const makeNodeLogs = (
|
||||
setLogDialog: (hostname: string, pid: number | null) => void,
|
||||
): NodeFeatureRenderFn => ({ node }) => {
|
||||
const logCount = nodeLogCount(node);
|
||||
return logCount === 0 ? (
|
||||
<Typography color="textSecondary" component="span" variant="inherit">
|
||||
No logs
|
||||
</Typography>
|
||||
) : (
|
||||
<SpanButton onClick={() => setLogDialog(node.hostname, null)}>
|
||||
View all logs ({logCount.toLocaleString()}{" "}
|
||||
{logCount === 1 ? "line" : "lines"})
|
||||
</SpanButton>
|
||||
);
|
||||
};
|
||||
|
||||
const nodeLogsAccessor: Accessor<NodeFeatureData> = ({ node }) =>
|
||||
node.log_count ? sum(Object.values(node.log_count)) : 0;
|
||||
|
||||
const makeWorkerLogs = (
|
||||
setLogDialog: (hostname: string, pid: number | null) => void,
|
||||
): WorkerFeatureRenderFn => ({ node, worker }) => {
|
||||
const workerLogCount = node.log_count?.[worker.pid] || 0;
|
||||
return workerLogCount !== 0 ? (
|
||||
<SpanButton onClick={() => setLogDialog(node.hostname, worker.pid)}>
|
||||
View log ({workerLogCount.toLocaleString()}{" "}
|
||||
{workerLogCount === 1 ? "line" : "lines"})
|
||||
</SpanButton>
|
||||
) : (
|
||||
<Typography color="textSecondary" component="span" variant="inherit">
|
||||
No logs
|
||||
</Typography>
|
||||
);
|
||||
};
|
||||
|
||||
const workerLogsAccessor: Accessor<WorkerFeatureData> = ({ worker, node }) => {
|
||||
const workerLogCount = node.log_count?.[worker.pid] || 0;
|
||||
return workerLogCount;
|
||||
};
|
||||
|
||||
const makeLogsFeature = (
|
||||
setLogDialog: (hostname: string, pid: number | null) => void,
|
||||
): NodeInfoFeature => ({
|
||||
id: "logs",
|
||||
ClusterFeatureRenderFn: ClusterLogs,
|
||||
WorkerFeatureRenderFn: makeWorkerLogs(setLogDialog),
|
||||
NodeFeatureRenderFn: makeNodeLogs(setLogDialog),
|
||||
workerAccessor: workerLogsAccessor,
|
||||
nodeAccessor: nodeLogsAccessor,
|
||||
});
|
||||
|
||||
export default makeLogsFeature;
|
||||
-85
@@ -1,85 +0,0 @@
|
||||
import { Typography } from "@material-ui/core";
|
||||
import React from "react";
|
||||
import { formatUsage } from "../../../../common/formatUtils";
|
||||
import { Accessor } from "../../../../common/tableUtils";
|
||||
import UsageBar from "../../../../common/UsageBar";
|
||||
import { sum } from "../../../../common/util";
|
||||
import {
|
||||
ClusterFeatureRenderFn,
|
||||
NodeFeatureData,
|
||||
NodeFeatureRenderFn,
|
||||
NodeInfoFeature,
|
||||
WorkerFeatureData,
|
||||
WorkerFeatureRenderFn,
|
||||
} from "./types";
|
||||
|
||||
export const ClusterObjectStoreMemory: ClusterFeatureRenderFn = ({
|
||||
plasmaStats,
|
||||
}) => {
|
||||
const totalAvailable = sum(
|
||||
plasmaStats.map((s) => s.object_store_available_memory),
|
||||
);
|
||||
const totalUsed = sum(plasmaStats.map((s) => s.object_store_used_memory));
|
||||
return (
|
||||
<div style={{ minWidth: 60 }}>
|
||||
<UsageBar
|
||||
percent={100 * (totalUsed / totalAvailable)}
|
||||
text={formatUsage(totalUsed, totalAvailable, "mebibyte", false)}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export const NodeObjectStoreMemory: NodeFeatureRenderFn = ({ plasmaStats }) => {
|
||||
if (!plasmaStats) {
|
||||
return (
|
||||
<Typography color="textSecondary" component="span" variant="inherit">
|
||||
N/A
|
||||
</Typography>
|
||||
);
|
||||
}
|
||||
const {
|
||||
object_store_used_memory,
|
||||
object_store_available_memory,
|
||||
} = plasmaStats;
|
||||
const usageRatio = object_store_used_memory / object_store_available_memory;
|
||||
return (
|
||||
<div style={{ minWidth: 60 }}>
|
||||
<UsageBar
|
||||
percent={usageRatio * 100}
|
||||
text={formatUsage(
|
||||
object_store_used_memory,
|
||||
object_store_available_memory,
|
||||
"mebibyte",
|
||||
false,
|
||||
)}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export const nodeObjectStoreMemoryAccessor: Accessor<NodeFeatureData> = ({
|
||||
plasmaStats,
|
||||
}) => {
|
||||
return plasmaStats?.object_store_used_memory ?? 0;
|
||||
};
|
||||
|
||||
export const WorkerObjectStoreMemory: WorkerFeatureRenderFn = () => (
|
||||
<Typography color="textSecondary" component="span" variant="inherit">
|
||||
N/A
|
||||
</Typography>
|
||||
);
|
||||
|
||||
export const workerObjectStoreMemoryAccessor: Accessor<WorkerFeatureData> = () =>
|
||||
0;
|
||||
|
||||
const objectStoreMemoryFeature: NodeInfoFeature = {
|
||||
id: "objectStoreMemory",
|
||||
ClusterFeatureRenderFn: ClusterObjectStoreMemory,
|
||||
NodeFeatureRenderFn: NodeObjectStoreMemory,
|
||||
WorkerFeatureRenderFn: WorkerObjectStoreMemory,
|
||||
nodeAccessor: nodeObjectStoreMemoryAccessor,
|
||||
workerAccessor: workerObjectStoreMemoryAccessor,
|
||||
};
|
||||
|
||||
export default objectStoreMemoryFeature;
|
||||
@@ -1,58 +0,0 @@
|
||||
import React from "react";
|
||||
import { formatByteAmount, formatUsage } from "../../../../common/formatUtils";
|
||||
import { Accessor } from "../../../../common/tableUtils";
|
||||
import UsageBar from "../../../../common/UsageBar";
|
||||
import {
|
||||
ClusterFeatureRenderFn,
|
||||
NodeFeatureData,
|
||||
NodeFeatureRenderFn,
|
||||
NodeInfoFeature,
|
||||
WorkerFeatureData,
|
||||
WorkerFeatureRenderFn,
|
||||
} from "./types";
|
||||
|
||||
export const ClusterRAM: ClusterFeatureRenderFn = ({ nodes }) => {
|
||||
let used = 0;
|
||||
let total = 0;
|
||||
for (const node of nodes) {
|
||||
used += node.mem[0] - node.mem[1];
|
||||
total += node.mem[0];
|
||||
}
|
||||
return (
|
||||
<UsageBar
|
||||
percent={(100 * used) / total}
|
||||
text={formatUsage(used, total, "gibibyte", true)}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
export const NodeRAM: NodeFeatureRenderFn = ({ node }) => (
|
||||
<UsageBar
|
||||
percent={(100 * (node.mem[0] - node.mem[1])) / node.mem[0]}
|
||||
text={formatUsage(node.mem[0] - node.mem[1], node.mem[0], "gibibyte", true)}
|
||||
/>
|
||||
);
|
||||
|
||||
export const nodeRAMAccessor: Accessor<NodeFeatureData> = ({ node }) =>
|
||||
100 * (node.mem[0] - node.mem[1]);
|
||||
|
||||
export const WorkerRAM: WorkerFeatureRenderFn = ({ node, worker }) => (
|
||||
<UsageBar
|
||||
percent={(100 * worker.memory_info.rss) / node.mem[0]}
|
||||
text={formatByteAmount(worker.memory_info.rss, "mebibyte")}
|
||||
/>
|
||||
);
|
||||
|
||||
export const workerRAMAccessor: Accessor<WorkerFeatureData> = ({ worker }) =>
|
||||
worker.memory_info.rss;
|
||||
|
||||
const ramFeature: NodeInfoFeature = {
|
||||
id: "ram",
|
||||
ClusterFeatureRenderFn: ClusterRAM,
|
||||
NodeFeatureRenderFn: NodeRAM,
|
||||
WorkerFeatureRenderFn: WorkerRAM,
|
||||
nodeAccessor: nodeRAMAccessor,
|
||||
workerAccessor: workerRAMAccessor,
|
||||
};
|
||||
|
||||
export default ramFeature;
|
||||
@@ -1,46 +0,0 @@
|
||||
import { Typography } from "@material-ui/core";
|
||||
import React from "react";
|
||||
import { formatByteAmount } from "../../../../common/formatUtils";
|
||||
import { Accessor } from "../../../../common/tableUtils";
|
||||
import {
|
||||
ClusterFeatureRenderFn,
|
||||
NodeFeatureData,
|
||||
NodeFeatureRenderFn,
|
||||
NodeInfoFeature,
|
||||
WorkerFeatureRenderFn,
|
||||
} from "./types";
|
||||
|
||||
export const ClusterReceived: ClusterFeatureRenderFn = ({ nodes }) => {
|
||||
let totalReceived = 0;
|
||||
for (const node of nodes) {
|
||||
totalReceived += node.net[1];
|
||||
}
|
||||
return (
|
||||
<React.Fragment>
|
||||
{formatByteAmount(totalReceived, "mebibyte")}/s
|
||||
</React.Fragment>
|
||||
);
|
||||
};
|
||||
|
||||
export const NodeReceived: NodeFeatureRenderFn = ({ node }) => (
|
||||
<React.Fragment>{formatByteAmount(node.net[1], "mebibyte")}/s</React.Fragment>
|
||||
);
|
||||
|
||||
export const nodeReceivedAccessor: Accessor<NodeFeatureData> = ({ node }) =>
|
||||
node.net[1];
|
||||
|
||||
export const WorkerReceived: WorkerFeatureRenderFn = () => (
|
||||
<Typography color="textSecondary" component="span" variant="inherit">
|
||||
N/A
|
||||
</Typography>
|
||||
);
|
||||
|
||||
const receivedFeature: NodeInfoFeature = {
|
||||
id: "received",
|
||||
ClusterFeatureRenderFn: ClusterReceived,
|
||||
NodeFeatureRenderFn: NodeReceived,
|
||||
WorkerFeatureRenderFn: WorkerReceived,
|
||||
nodeAccessor: nodeReceivedAccessor,
|
||||
};
|
||||
|
||||
export default receivedFeature;
|
||||
@@ -1,44 +0,0 @@
|
||||
import { Typography } from "@material-ui/core";
|
||||
import React from "react";
|
||||
import { formatByteAmount } from "../../../../common/formatUtils";
|
||||
import { Accessor } from "../../../../common/tableUtils";
|
||||
import {
|
||||
ClusterFeatureRenderFn,
|
||||
NodeFeatureData,
|
||||
NodeFeatureRenderFn,
|
||||
NodeInfoFeature,
|
||||
WorkerFeatureRenderFn,
|
||||
} from "./types";
|
||||
|
||||
export const ClusterSent: ClusterFeatureRenderFn = ({ nodes }) => {
|
||||
let totalSent = 0;
|
||||
for (const node of nodes) {
|
||||
totalSent += node.net[0];
|
||||
}
|
||||
return (
|
||||
<React.Fragment>{formatByteAmount(totalSent, "mebibyte")}/s</React.Fragment>
|
||||
);
|
||||
};
|
||||
|
||||
export const NodeSent: NodeFeatureRenderFn = ({ node }) => (
|
||||
<React.Fragment>{formatByteAmount(node.net[0], "mebibyte")}/s</React.Fragment>
|
||||
);
|
||||
|
||||
export const nodeSentAccessor: Accessor<NodeFeatureData> = ({ node }) =>
|
||||
node.net[0];
|
||||
|
||||
export const WorkerSent: WorkerFeatureRenderFn = () => (
|
||||
<Typography color="textSecondary" component="span" variant="inherit">
|
||||
N/A
|
||||
</Typography>
|
||||
);
|
||||
|
||||
const sentFeature: NodeInfoFeature = {
|
||||
id: "sent",
|
||||
ClusterFeatureRenderFn: ClusterSent,
|
||||
NodeFeatureRenderFn: NodeSent,
|
||||
WorkerFeatureRenderFn: WorkerSent,
|
||||
nodeAccessor: nodeSentAccessor,
|
||||
};
|
||||
|
||||
export default sentFeature;
|
||||
@@ -1,46 +0,0 @@
|
||||
import { Typography } from "@material-ui/core";
|
||||
import React from "react";
|
||||
import { formatDuration } from "../../../../common/formatUtils";
|
||||
import { Accessor } from "../../../../common/tableUtils";
|
||||
import {
|
||||
ClusterFeatureRenderFn,
|
||||
NodeFeatureData,
|
||||
NodeFeatureRenderFn,
|
||||
NodeInfoFeature,
|
||||
WorkerFeatureData,
|
||||
WorkerFeatureRenderFn,
|
||||
} from "./types";
|
||||
|
||||
const getUptime = (bootTime: number) => Date.now() / 1000 - bootTime;
|
||||
|
||||
export const ClusterUptime: ClusterFeatureRenderFn = ({ nodes }) => (
|
||||
<Typography color="textSecondary" component="span" variant="inherit">
|
||||
N/A
|
||||
</Typography>
|
||||
);
|
||||
|
||||
export const NodeUptime: NodeFeatureRenderFn = ({ node }) => (
|
||||
<React.Fragment>{formatDuration(getUptime(node.boot_time))}</React.Fragment>
|
||||
);
|
||||
|
||||
export const nodeUptimeAccessor: Accessor<NodeFeatureData> = ({ node }) =>
|
||||
getUptime(node.boot_time);
|
||||
|
||||
export const WorkerUptime: WorkerFeatureRenderFn = ({ worker }) => (
|
||||
<React.Fragment>
|
||||
{formatDuration(getUptime(worker.create_time))}
|
||||
</React.Fragment>
|
||||
);
|
||||
|
||||
const workerUptimeAccessor: Accessor<WorkerFeatureData> = ({ worker }) =>
|
||||
getUptime(worker.create_time);
|
||||
|
||||
const uptimeFeature: NodeInfoFeature = {
|
||||
id: "uptime",
|
||||
NodeFeatureRenderFn: NodeUptime,
|
||||
WorkerFeatureRenderFn: WorkerUptime,
|
||||
nodeAccessor: nodeUptimeAccessor,
|
||||
workerAccessor: workerUptimeAccessor,
|
||||
};
|
||||
|
||||
export default uptimeFeature;
|
||||
@@ -1,51 +0,0 @@
|
||||
import React from "react";
|
||||
import {
|
||||
ClusterFeatureRenderFn,
|
||||
NodeFeatureRenderFn,
|
||||
NodeInfoFeature,
|
||||
WorkerFeatureRenderFn,
|
||||
} from "./types";
|
||||
|
||||
export const ClusterWorkers: ClusterFeatureRenderFn = ({ nodes }) => {
|
||||
let totalCpus = 0;
|
||||
let totalWorkers = 0;
|
||||
for (const node of nodes) {
|
||||
totalCpus += node.cpus[0];
|
||||
totalWorkers += node.workers.length;
|
||||
}
|
||||
return (
|
||||
<React.Fragment>
|
||||
{totalWorkers.toLocaleString()}{" "}
|
||||
{totalWorkers === 1 ? "worker" : "workers"} / {totalCpus.toLocaleString()}{" "}
|
||||
{totalCpus === 1 ? "core" : "cores"}
|
||||
</React.Fragment>
|
||||
);
|
||||
};
|
||||
|
||||
export const NodeWorkers: NodeFeatureRenderFn = ({ node }) => {
|
||||
const cpus = node.cpus[0];
|
||||
const totalWorkers = node.workers.length;
|
||||
return (
|
||||
<React.Fragment>
|
||||
{totalWorkers.toLocaleString()}{" "}
|
||||
{totalWorkers === 1 ? "worker" : "workers"} / {cpus.toLocaleString()}{" "}
|
||||
{cpus === 1 ? "core" : "cores"}
|
||||
</React.Fragment>
|
||||
);
|
||||
};
|
||||
|
||||
// Ray worker process titles have one of the following forms: `ray::IDLE`,
|
||||
// `ray::function()`, `ray::Class`, or `ray::Class.method()`. We extract the
|
||||
// second portion here for display in the "Workers" column.
|
||||
export const WorkerWorkers: WorkerFeatureRenderFn = ({ worker }) => (
|
||||
<React.Fragment>{worker.cmdline[0].split("::", 2)[1]}</React.Fragment>
|
||||
);
|
||||
|
||||
const workersFeature: NodeInfoFeature = {
|
||||
id: "workers",
|
||||
ClusterFeatureRenderFn: ClusterWorkers,
|
||||
NodeFeatureRenderFn: NodeWorkers,
|
||||
WorkerFeatureRenderFn: WorkerWorkers,
|
||||
};
|
||||
|
||||
export default workersFeature;
|
||||
@@ -1,51 +0,0 @@
|
||||
import React from "react";
|
||||
import {
|
||||
NodeInfoResponse,
|
||||
PlasmaStats,
|
||||
RayletWorkerStats,
|
||||
} from "../../../../api";
|
||||
import { Accessor } from "../../../../common/tableUtils";
|
||||
|
||||
type ArrayType<T> = T extends Array<infer U> ? U : never;
|
||||
export type Node = ArrayType<NodeInfoResponse["clients"]>;
|
||||
export type Worker = ArrayType<Node["workers"]>;
|
||||
|
||||
type ClusterFeatureData = { nodes: Node[]; plasmaStats: PlasmaStats[] };
|
||||
export type NodeFeatureData = { node: Node; plasmaStats?: PlasmaStats };
|
||||
export type WorkerFeatureData = {
|
||||
node: Node;
|
||||
worker: Worker;
|
||||
rayletWorker: RayletWorkerStats | null;
|
||||
};
|
||||
|
||||
export type ClusterFeatureRenderFn = (
|
||||
data: ClusterFeatureData,
|
||||
) => React.ReactElement;
|
||||
export type NodeFeatureRenderFn = (data: NodeFeatureData) => React.ReactElement;
|
||||
export type WorkerFeatureRenderFn = (
|
||||
data: WorkerFeatureData,
|
||||
) => React.ReactElement;
|
||||
|
||||
export type NodeInfoFeature = {
|
||||
id: nodeInfoColumnId;
|
||||
WorkerFeatureRenderFn: WorkerFeatureRenderFn;
|
||||
NodeFeatureRenderFn: NodeFeatureRenderFn;
|
||||
ClusterFeatureRenderFn?: ClusterFeatureRenderFn;
|
||||
workerAccessor?: Accessor<WorkerFeatureData>;
|
||||
nodeAccessor?: Accessor<NodeFeatureData>;
|
||||
};
|
||||
|
||||
export type nodeInfoColumnId =
|
||||
| "host"
|
||||
| "workers"
|
||||
| "uptime"
|
||||
| "cpu"
|
||||
| "ram"
|
||||
| "gpu"
|
||||
| "gram"
|
||||
| "objectStoreMemory"
|
||||
| "disk"
|
||||
| "sent"
|
||||
| "received"
|
||||
| "logs"
|
||||
| "errors";
|
||||
@@ -1,139 +0,0 @@
|
||||
import {
|
||||
createStyles,
|
||||
Table,
|
||||
TableBody,
|
||||
TableCell,
|
||||
TableHead,
|
||||
TableRow,
|
||||
Theme,
|
||||
Typography,
|
||||
withStyles,
|
||||
WithStyles,
|
||||
} from "@material-ui/core";
|
||||
import classNames from "classnames";
|
||||
import React from "react";
|
||||
import { connect } from "react-redux";
|
||||
import { getRayConfig } from "../../../api";
|
||||
import { StoreState } from "../../../store";
|
||||
import { dashboardActions } from "../state";
|
||||
|
||||
const styles = (theme: Theme) =>
|
||||
createStyles({
|
||||
table: {
|
||||
marginTop: theme.spacing(1),
|
||||
width: "auto",
|
||||
},
|
||||
cell: {
|
||||
paddingTop: theme.spacing(1),
|
||||
paddingBottom: theme.spacing(1),
|
||||
paddingLeft: theme.spacing(3),
|
||||
paddingRight: theme.spacing(3),
|
||||
textAlign: "center",
|
||||
"&:last-child": {
|
||||
paddingRight: theme.spacing(3),
|
||||
},
|
||||
},
|
||||
key: {
|
||||
color: theme.palette.text.secondary,
|
||||
},
|
||||
});
|
||||
|
||||
const mapStateToProps = (state: StoreState) => ({
|
||||
rayConfig: state.dashboard.rayConfig,
|
||||
});
|
||||
|
||||
const mapDispatchToProps = dashboardActions;
|
||||
|
||||
class RayConfig extends React.Component<
|
||||
WithStyles<typeof styles> &
|
||||
ReturnType<typeof mapStateToProps> &
|
||||
typeof mapDispatchToProps
|
||||
> {
|
||||
refreshRayConfig = async () => {
|
||||
try {
|
||||
const rayConfig = await getRayConfig();
|
||||
this.props.setRayConfig(rayConfig);
|
||||
} catch (error) {
|
||||
} finally {
|
||||
setTimeout(this.refreshRayConfig, 10 * 1000);
|
||||
}
|
||||
};
|
||||
|
||||
async componentDidMount() {
|
||||
await this.refreshRayConfig();
|
||||
}
|
||||
|
||||
render() {
|
||||
const { classes, rayConfig } = this.props;
|
||||
|
||||
if (rayConfig === null) {
|
||||
return (
|
||||
<Typography color="textSecondary">
|
||||
No Ray configuration detected.
|
||||
</Typography>
|
||||
);
|
||||
}
|
||||
|
||||
const formattedRayConfig = [
|
||||
{
|
||||
key: "Autoscaling mode",
|
||||
value: rayConfig.autoscaling_mode,
|
||||
},
|
||||
{
|
||||
key: "Head node type",
|
||||
value: rayConfig.head_type,
|
||||
},
|
||||
{
|
||||
key: "Worker node type",
|
||||
value: rayConfig.worker_type,
|
||||
},
|
||||
{
|
||||
key: "Min worker nodes",
|
||||
value: rayConfig.min_workers,
|
||||
},
|
||||
{
|
||||
key: "Initial worker nodes",
|
||||
value: rayConfig.initial_workers,
|
||||
},
|
||||
{
|
||||
key: "Max worker nodes",
|
||||
value: rayConfig.max_workers,
|
||||
},
|
||||
{
|
||||
key: "Idle timeout",
|
||||
value: `${rayConfig.idle_timeout_minutes} ${
|
||||
rayConfig.idle_timeout_minutes === 1 ? "minute" : "minutes"
|
||||
}`,
|
||||
},
|
||||
];
|
||||
|
||||
return (
|
||||
<div>
|
||||
<Typography>Ray cluster configuration:</Typography>
|
||||
<Table className={classes.table}>
|
||||
<TableHead>
|
||||
<TableRow>
|
||||
<TableCell className={classes.cell}>Setting</TableCell>
|
||||
<TableCell className={classes.cell}>Value</TableCell>
|
||||
</TableRow>
|
||||
</TableHead>
|
||||
<TableBody>
|
||||
{formattedRayConfig.map(({ key, value }, index) => (
|
||||
<TableRow key={index}>
|
||||
<TableCell className={classNames(classes.cell, classes.key)}>
|
||||
{key}
|
||||
</TableCell>
|
||||
<TableCell className={classes.cell}>{value}</TableCell>
|
||||
</TableRow>
|
||||
))}
|
||||
</TableBody>
|
||||
</Table>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default connect(
|
||||
mapStateToProps,
|
||||
mapDispatchToProps,
|
||||
)(withStyles(styles)(RayConfig));
|
||||
@@ -1,141 +0,0 @@
|
||||
import { createSlice, PayloadAction } from "@reduxjs/toolkit";
|
||||
import {
|
||||
MemoryTableResponse,
|
||||
NodeInfoResponse,
|
||||
RayConfigResponse,
|
||||
RayletInfoResponse,
|
||||
TuneAvailabilityResponse,
|
||||
TuneJobResponse,
|
||||
} from "../../api";
|
||||
import { filterObj } from "../../common/util";
|
||||
|
||||
const name = "dashboard";
|
||||
|
||||
type State = {
|
||||
tab: number;
|
||||
rayConfig: RayConfigResponse | null;
|
||||
nodeInfo: NodeInfoResponse | null;
|
||||
rayletInfo: RayletInfoResponse | null;
|
||||
tuneInfo: TuneJobResponse | null;
|
||||
tuneAvailability: TuneAvailabilityResponse | null;
|
||||
lastUpdatedAt: number | null;
|
||||
error: string | null;
|
||||
memoryTable: MemoryTableResponse | null;
|
||||
shouldObtainMemoryTable: boolean;
|
||||
};
|
||||
|
||||
const initialState: State = {
|
||||
tab: 0,
|
||||
rayConfig: null,
|
||||
nodeInfo: null,
|
||||
rayletInfo: null,
|
||||
tuneInfo: null,
|
||||
tuneAvailability: null,
|
||||
lastUpdatedAt: null,
|
||||
error: null,
|
||||
memoryTable: null,
|
||||
shouldObtainMemoryTable: false,
|
||||
};
|
||||
|
||||
const slice = createSlice({
|
||||
name,
|
||||
initialState,
|
||||
reducers: {
|
||||
setTab: (state, action: PayloadAction<number>) => {
|
||||
state.tab = action.payload;
|
||||
},
|
||||
setRayConfig: (state, action: PayloadAction<RayConfigResponse>) => {
|
||||
state.rayConfig = action.payload;
|
||||
},
|
||||
setNodeAndRayletInfo: (
|
||||
state,
|
||||
action: PayloadAction<{
|
||||
nodeInfo: NodeInfoResponse;
|
||||
rayletInfo: RayletInfoResponse;
|
||||
}>,
|
||||
) => {
|
||||
state.rayletInfo = action.payload.rayletInfo;
|
||||
state.nodeInfo = filterNonClusterWorkerInfo(
|
||||
action.payload.rayletInfo,
|
||||
action.payload.nodeInfo,
|
||||
);
|
||||
state.lastUpdatedAt = Date.now();
|
||||
},
|
||||
setTuneInfo: (state, action: PayloadAction<TuneJobResponse>) => {
|
||||
state.tuneInfo = action.payload;
|
||||
state.lastUpdatedAt = Date.now();
|
||||
},
|
||||
setTuneAvailability: (
|
||||
state,
|
||||
action: PayloadAction<TuneAvailabilityResponse>,
|
||||
) => {
|
||||
state.tuneAvailability = action.payload;
|
||||
state.lastUpdatedAt = Date.now();
|
||||
},
|
||||
setError: (state, action: PayloadAction<string | null>) => {
|
||||
state.error = action.payload;
|
||||
},
|
||||
setMemoryTable: (
|
||||
state,
|
||||
action: PayloadAction<MemoryTableResponse | null>,
|
||||
) => {
|
||||
state.memoryTable = action.payload;
|
||||
},
|
||||
setShouldObtainMemoryTable: (state, action: PayloadAction<boolean>) => {
|
||||
state.shouldObtainMemoryTable = action.payload;
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const clusterWorkerPids = (
|
||||
rayletInfo: RayletInfoResponse,
|
||||
): Map<string, Set<number>> => {
|
||||
// Groups PIDs registered with the raylet by node IP address
|
||||
// This is used to filter out processes belonging to other ray clusters.
|
||||
const nodeMap = new Map();
|
||||
const workerPids = new Set();
|
||||
for (const [nodeIp, { workersStats }] of Object.entries(rayletInfo.nodes)) {
|
||||
for (const worker of workersStats) {
|
||||
if (!worker.isDriver) {
|
||||
workerPids.add(worker.pid);
|
||||
}
|
||||
}
|
||||
nodeMap.set(nodeIp, workerPids);
|
||||
}
|
||||
return nodeMap;
|
||||
};
|
||||
|
||||
const filterNonClusterWorkerInfo = (
|
||||
rayletInfo: RayletInfoResponse,
|
||||
nodeInfo: NodeInfoResponse,
|
||||
) => {
|
||||
// The back-end that generates the NodeInfoResponse does not remove worker
|
||||
// information of workers that belong to other clusters, so we do it here.
|
||||
const workerPidsByIP = clusterWorkerPids(rayletInfo);
|
||||
const filteredClients = nodeInfo.clients.map((client) => {
|
||||
const workerPids = workerPidsByIP.get(client.ip);
|
||||
const workers = client.workers.filter((worker) =>
|
||||
workerPids?.has(worker.pid),
|
||||
);
|
||||
const logs = client.log_count
|
||||
? filterObj(client.log_count, ([pid, _]: [string, any]) =>
|
||||
workerPids?.has(parseInt(pid)),
|
||||
)
|
||||
: {};
|
||||
const errors = client.error_count
|
||||
? filterObj(client.error_count, ([pid, _]: [string, any]) =>
|
||||
workerPids?.has(parseInt(pid)),
|
||||
)
|
||||
: {};
|
||||
client.workers = workers;
|
||||
client.log_count = logs;
|
||||
client.error_count = errors;
|
||||
return client;
|
||||
});
|
||||
return {
|
||||
clients: filteredClients,
|
||||
};
|
||||
};
|
||||
|
||||
export const dashboardActions = slice.actions;
|
||||
export const dashboardReducer = slice.reducer;
|
||||
@@ -1,219 +0,0 @@
|
||||
import {
|
||||
Button,
|
||||
CircularProgress,
|
||||
createStyles,
|
||||
Tab,
|
||||
Tabs,
|
||||
TextField,
|
||||
Theme,
|
||||
Typography,
|
||||
WithStyles,
|
||||
withStyles,
|
||||
} from "@material-ui/core";
|
||||
import React from "react";
|
||||
import { connect } from "react-redux";
|
||||
import { getTuneInfo, setTuneExperiment } from "../../../api";
|
||||
import { StoreState } from "../../../store";
|
||||
import { dashboardActions } from "../state";
|
||||
import TuneErrors from "./TuneErrors";
|
||||
import TuneTable from "./TuneTable";
|
||||
import TuneTensorBoard from "./TuneTensorBoard";
|
||||
|
||||
const styles = (theme: Theme) =>
|
||||
createStyles({
|
||||
root: {
|
||||
backgroundColor: theme.palette.background.paper,
|
||||
},
|
||||
tabs: {
|
||||
borderBottomColor: theme.palette.divider,
|
||||
borderBottomStyle: "solid",
|
||||
borderBottomWidth: 1,
|
||||
},
|
||||
heading: {
|
||||
fontsize: "0.9em",
|
||||
marginTop: theme.spacing(2),
|
||||
},
|
||||
warning: {
|
||||
fontSize: "1em",
|
||||
},
|
||||
warningIcon: {
|
||||
fontSize: "1.25em",
|
||||
verticalAlign: "text-bottom",
|
||||
},
|
||||
formControl: {
|
||||
margin: theme.spacing(1),
|
||||
minWidth: 120,
|
||||
},
|
||||
submit: {
|
||||
marginLeft: theme.spacing(2),
|
||||
fontSize: "0.8125em",
|
||||
},
|
||||
prompt: {
|
||||
fontSize: "1em",
|
||||
marginTop: theme.spacing(1),
|
||||
},
|
||||
input: {
|
||||
width: "85%",
|
||||
},
|
||||
progress: {
|
||||
marginLeft: theme.spacing(2),
|
||||
},
|
||||
});
|
||||
|
||||
const mapStateToProps = (state: StoreState) => ({
|
||||
tuneInfo: state.dashboard.tuneInfo,
|
||||
tuneAvailability: state.dashboard.tuneAvailability,
|
||||
});
|
||||
|
||||
const mapDispatchToProps = dashboardActions;
|
||||
|
||||
type State = {
|
||||
tabIndex: number;
|
||||
experiment: string;
|
||||
loading: boolean;
|
||||
};
|
||||
|
||||
class Tune extends React.Component<
|
||||
WithStyles<typeof styles> &
|
||||
ReturnType<typeof mapStateToProps> &
|
||||
typeof mapDispatchToProps,
|
||||
State
|
||||
> {
|
||||
timeout: number = 0;
|
||||
|
||||
state: State = {
|
||||
tabIndex: 0,
|
||||
experiment: "",
|
||||
loading: false,
|
||||
};
|
||||
|
||||
refreshTuneInfo = async () => {
|
||||
try {
|
||||
if (
|
||||
this.props.tuneAvailability &&
|
||||
this.props.tuneAvailability.available
|
||||
) {
|
||||
const tuneInfo = await getTuneInfo();
|
||||
this.props.setTuneInfo(tuneInfo);
|
||||
}
|
||||
} catch (error) {
|
||||
this.props.setError(error.toString());
|
||||
} finally {
|
||||
this.timeout = window.setTimeout(this.refreshTuneInfo, 1000);
|
||||
}
|
||||
};
|
||||
|
||||
async componentWillUnmount() {
|
||||
window.clearTimeout(this.timeout);
|
||||
}
|
||||
|
||||
handleTabChange = (event: React.ChangeEvent<{}>, value: number) => {
|
||||
this.setState({
|
||||
tabIndex: value,
|
||||
});
|
||||
};
|
||||
|
||||
handleExperimentChange = (event: React.ChangeEvent<{ value: any }>) => {
|
||||
this.setState({
|
||||
experiment: event.target.value,
|
||||
});
|
||||
};
|
||||
|
||||
handleExperimentSubmit = async () => {
|
||||
this.setState({ loading: true });
|
||||
try {
|
||||
await setTuneExperiment(this.state.experiment);
|
||||
window.clearTimeout(this.timeout);
|
||||
await this.refreshTuneInfo();
|
||||
this.setState({ loading: false });
|
||||
} catch (error) {
|
||||
this.props.setError(error.toString());
|
||||
this.setState({ loading: false });
|
||||
}
|
||||
};
|
||||
|
||||
experimentChoice = (prompt: boolean) => {
|
||||
const { classes } = this.props;
|
||||
|
||||
const { loading } = this.state;
|
||||
return (
|
||||
<div>
|
||||
{prompt && (
|
||||
<Typography className={classes.heading} color="textPrimary">
|
||||
You can use this tab to monitor Tune jobs, their statuses,
|
||||
hyperparameters, and more. For more information, read the
|
||||
documentation{" "}
|
||||
<a href="https://docs.ray.io/en/master/ray-dashboard.html#tune">
|
||||
here
|
||||
</a>
|
||||
.
|
||||
</Typography>
|
||||
)}
|
||||
<div>
|
||||
<Typography className={classes.prompt} color="textSecondary">
|
||||
Enter Tune Log Directory Here:
|
||||
</Typography>
|
||||
<TextField
|
||||
className={classes.input}
|
||||
id="standard-basic"
|
||||
value={this.state.experiment}
|
||||
onChange={this.handleExperimentChange}
|
||||
/>
|
||||
<Button
|
||||
className={classes.submit}
|
||||
variant="outlined"
|
||||
onClick={this.handleExperimentSubmit}
|
||||
>
|
||||
Submit
|
||||
</Button>
|
||||
{loading && (
|
||||
<CircularProgress className={classes.progress} size={25} />
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
render() {
|
||||
const { classes, tuneInfo, tuneAvailability } = this.props;
|
||||
|
||||
if (tuneAvailability && !tuneAvailability.trials_available) {
|
||||
return this.experimentChoice(true);
|
||||
}
|
||||
|
||||
const { tabIndex } = this.state;
|
||||
|
||||
const tabs = [
|
||||
{ label: "Table", component: TuneTable },
|
||||
{ label: "TensorBoard", component: TuneTensorBoard },
|
||||
];
|
||||
|
||||
if (tuneInfo !== null && Object.keys(tuneInfo.errors).length > 0) {
|
||||
tabs.push({ label: "Errors", component: TuneErrors });
|
||||
}
|
||||
|
||||
const SelectedComponent = tabs[tabIndex].component;
|
||||
return (
|
||||
<div className={classes.root}>
|
||||
{this.experimentChoice(false)}
|
||||
<Tabs
|
||||
className={classes.tabs}
|
||||
indicatorColor="primary"
|
||||
onChange={this.handleTabChange}
|
||||
textColor="primary"
|
||||
value={tabIndex}
|
||||
>
|
||||
{tabs.map(({ label }) => (
|
||||
<Tab key={label} label={label} />
|
||||
))}
|
||||
</Tabs>
|
||||
<SelectedComponent />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default connect(
|
||||
mapStateToProps,
|
||||
mapDispatchToProps,
|
||||
)(withStyles(styles)(Tune));
|
||||
@@ -1,131 +0,0 @@
|
||||
import {
|
||||
createStyles,
|
||||
Link,
|
||||
Table,
|
||||
TableBody,
|
||||
TableCell,
|
||||
TableHead,
|
||||
TableRow,
|
||||
Theme,
|
||||
withStyles,
|
||||
WithStyles,
|
||||
} from "@material-ui/core";
|
||||
import React from "react";
|
||||
import { connect } from "react-redux";
|
||||
import DialogWithTitle from "../../../common/DialogWithTitle";
|
||||
import NumberedLines from "../../../common/NumberedLines";
|
||||
import { StoreState } from "../../../store";
|
||||
import { dashboardActions } from "../state";
|
||||
|
||||
const styles = (theme: Theme) =>
|
||||
createStyles({
|
||||
table: {
|
||||
marginTop: theme.spacing(1),
|
||||
},
|
||||
cell: {
|
||||
padding: theme.spacing(1),
|
||||
textAlign: "center",
|
||||
"&:last-child": {
|
||||
paddingRight: theme.spacing(1),
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const mapStateToProps = (state: StoreState) => ({
|
||||
tuneInfo: state.dashboard.tuneInfo,
|
||||
});
|
||||
|
||||
const mapDispatchToProps = dashboardActions;
|
||||
|
||||
type State = {
|
||||
currentError: string;
|
||||
open: boolean;
|
||||
};
|
||||
|
||||
class TuneErrors extends React.Component<
|
||||
WithStyles<typeof styles> &
|
||||
ReturnType<typeof mapStateToProps> &
|
||||
typeof mapDispatchToProps,
|
||||
State
|
||||
> {
|
||||
state: State = {
|
||||
currentError: "",
|
||||
open: false,
|
||||
};
|
||||
|
||||
handleOpen = (key: string) => {
|
||||
this.setState({
|
||||
open: true,
|
||||
currentError: key,
|
||||
});
|
||||
};
|
||||
|
||||
handleClose = () => {
|
||||
this.setState({
|
||||
open: false,
|
||||
});
|
||||
};
|
||||
|
||||
render() {
|
||||
const { classes, tuneInfo } = this.props;
|
||||
const { currentError, open } = this.state;
|
||||
|
||||
if (tuneInfo === null || Object.keys(tuneInfo.errors).length === 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (
|
||||
<React.Fragment>
|
||||
<Table className={classes.table}>
|
||||
<TableHead>
|
||||
<TableRow>
|
||||
<TableCell className={classes.cell}> Job ID</TableCell>
|
||||
<TableCell className={classes.cell}> Trial ID </TableCell>
|
||||
<TableCell className={classes.cell}> Trial Directory </TableCell>
|
||||
<TableCell className={classes.cell}> Error </TableCell>
|
||||
</TableRow>
|
||||
</TableHead>
|
||||
<TableBody>
|
||||
{tuneInfo.errors !== null &&
|
||||
Object.keys(tuneInfo.errors).map((key, index) => (
|
||||
<TableRow key={index}>
|
||||
<TableCell className={classes.cell}>
|
||||
{tuneInfo.errors[key].job_id}
|
||||
</TableCell>
|
||||
<TableCell className={classes.cell}>
|
||||
{tuneInfo.errors[key].trial_id}
|
||||
</TableCell>
|
||||
<TableCell className={classes.cell}>{key}</TableCell>
|
||||
<TableCell className={classes.cell}>
|
||||
<Link
|
||||
component="button"
|
||||
variant="body2"
|
||||
onClick={() => {
|
||||
this.handleOpen(key);
|
||||
}}
|
||||
>
|
||||
Show Error
|
||||
</Link>
|
||||
</TableCell>
|
||||
</TableRow>
|
||||
))}
|
||||
</TableBody>
|
||||
</Table>
|
||||
{open && (
|
||||
<DialogWithTitle handleClose={this.handleClose} title="Error Log">
|
||||
{open && (
|
||||
<NumberedLines
|
||||
lines={tuneInfo.errors[currentError].text.trim().split("\n")}
|
||||
/>
|
||||
)}
|
||||
</DialogWithTitle>
|
||||
)}
|
||||
</React.Fragment>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default connect(
|
||||
mapStateToProps,
|
||||
mapDispatchToProps,
|
||||
)(withStyles(styles)(TuneErrors));
|
||||
@@ -1,447 +0,0 @@
|
||||
import {
|
||||
Checkbox,
|
||||
createStyles,
|
||||
FormControl,
|
||||
FormControlLabel,
|
||||
FormGroup,
|
||||
FormLabel,
|
||||
Grid,
|
||||
Link,
|
||||
Table,
|
||||
TableBody,
|
||||
TableCell,
|
||||
TableHead,
|
||||
TableRow,
|
||||
TableSortLabel,
|
||||
Theme,
|
||||
WithStyles,
|
||||
withStyles,
|
||||
} from "@material-ui/core";
|
||||
import React from "react";
|
||||
import { connect } from "react-redux";
|
||||
import { TuneTrial } from "../../../api";
|
||||
import DialogWithTitle from "../../../common/DialogWithTitle";
|
||||
import { formatValue } from "../../../common/formatUtils";
|
||||
import NumberedLines from "../../../common/NumberedLines";
|
||||
import { StoreState } from "../../../store";
|
||||
import { dashboardActions } from "../state";
|
||||
|
||||
const styles = (theme: Theme) =>
|
||||
createStyles({
|
||||
root: {
|
||||
padding: theme.spacing(2),
|
||||
"& > :not(:first-child)": {
|
||||
marginTop: theme.spacing(2),
|
||||
},
|
||||
},
|
||||
table: {
|
||||
marginTop: theme.spacing(1),
|
||||
height: "700px",
|
||||
overflowY: "auto",
|
||||
},
|
||||
cell: {
|
||||
padding: theme.spacing(1),
|
||||
textAlign: "right",
|
||||
"&:last-child": {
|
||||
paddingRight: theme.spacing(1),
|
||||
},
|
||||
},
|
||||
checkboxRoot: {
|
||||
height: "500px",
|
||||
overflowY: "auto",
|
||||
overflowX: "auto",
|
||||
},
|
||||
paramChecklist: {
|
||||
marginBottom: theme.spacing(2),
|
||||
},
|
||||
});
|
||||
|
||||
const mapStateToProps = (state: StoreState) => ({
|
||||
tuneInfo: state.dashboard.tuneInfo,
|
||||
});
|
||||
|
||||
type State = {
|
||||
metricParamColumn: string;
|
||||
ascending: boolean;
|
||||
sortedColumn: keyof TuneTrial | undefined;
|
||||
metricColumns: string[];
|
||||
paramColumns: string[];
|
||||
errorTrial: string;
|
||||
open: boolean;
|
||||
};
|
||||
|
||||
const mapDispatchToProps = dashboardActions;
|
||||
|
||||
class TuneTable extends React.Component<
|
||||
WithStyles<typeof styles> &
|
||||
ReturnType<typeof mapStateToProps> &
|
||||
typeof mapDispatchToProps,
|
||||
State
|
||||
> {
|
||||
timeout: number = 0;
|
||||
|
||||
state: State = {
|
||||
sortedColumn: undefined,
|
||||
ascending: true,
|
||||
metricParamColumn: "",
|
||||
metricColumns: [],
|
||||
paramColumns: [],
|
||||
errorTrial: "",
|
||||
open: false,
|
||||
};
|
||||
|
||||
onColumnClick = (column: keyof TuneTrial, metricParamColumn?: string) => {
|
||||
let ascending = this.state.ascending;
|
||||
if (column === this.state.sortedColumn) {
|
||||
ascending = !ascending;
|
||||
} else {
|
||||
ascending = true;
|
||||
}
|
||||
this.setState({
|
||||
sortedColumn: column,
|
||||
ascending: ascending,
|
||||
});
|
||||
|
||||
if (metricParamColumn) {
|
||||
this.setState({
|
||||
metricParamColumn: metricParamColumn,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Replaces all underscores with spaces and capitalizes all words
|
||||
* in str
|
||||
*/
|
||||
humanize = (str: string) =>
|
||||
str
|
||||
.split("_")
|
||||
.map((part) => part.charAt(0).toUpperCase() + part.slice(1))
|
||||
.join(" ");
|
||||
|
||||
handleOpen = (key: string | number) => {
|
||||
if (typeof key === "number") {
|
||||
key = key.toString();
|
||||
}
|
||||
this.setState({
|
||||
open: true,
|
||||
errorTrial: key,
|
||||
});
|
||||
};
|
||||
|
||||
handleClose = () => {
|
||||
this.setState({
|
||||
open: false,
|
||||
});
|
||||
};
|
||||
|
||||
sortedCell = (
|
||||
name: keyof TuneTrial,
|
||||
chosenMetricParam?: string,
|
||||
index?: number,
|
||||
) => {
|
||||
const { tuneInfo, classes } = this.props;
|
||||
const { sortedColumn, ascending, metricParamColumn } = this.state;
|
||||
let label: "desc" | "asc" = "asc";
|
||||
|
||||
if (name === sortedColumn && !ascending) {
|
||||
label = "desc";
|
||||
}
|
||||
|
||||
if (tuneInfo === null) {
|
||||
return;
|
||||
}
|
||||
|
||||
let onClick = () => this.onColumnClick(name);
|
||||
if (chosenMetricParam) {
|
||||
onClick = () => this.onColumnClick(name, chosenMetricParam);
|
||||
}
|
||||
|
||||
if (!index) {
|
||||
index = 0;
|
||||
}
|
||||
|
||||
let active = false;
|
||||
let key: string = name + index.toString();
|
||||
if (chosenMetricParam) {
|
||||
key = chosenMetricParam + index.toString();
|
||||
active = chosenMetricParam === metricParamColumn && sortedColumn === name;
|
||||
} else {
|
||||
active = name === sortedColumn;
|
||||
}
|
||||
|
||||
return (
|
||||
<TableCell className={classes.cell} key={key} onClick={onClick}>
|
||||
<TableSortLabel active={active} direction={label} />
|
||||
{chosenMetricParam
|
||||
? this.humanize(chosenMetricParam)
|
||||
: this.humanize(name)}
|
||||
</TableCell>
|
||||
);
|
||||
};
|
||||
|
||||
sortedTrialRecords = () => {
|
||||
const { tuneInfo } = this.props;
|
||||
const { sortedColumn, ascending, metricParamColumn } = this.state;
|
||||
|
||||
if (tuneInfo === null || Object.keys(tuneInfo.trial_records).length === 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const trialDetails = Object.values(tuneInfo.trial_records);
|
||||
|
||||
if (!sortedColumn) {
|
||||
return trialDetails;
|
||||
}
|
||||
|
||||
let getAttribute = (trial: TuneTrial) => trial[sortedColumn!];
|
||||
if (sortedColumn === "metrics" || sortedColumn === "params") {
|
||||
getAttribute = (trial: TuneTrial) =>
|
||||
trial[sortedColumn!][metricParamColumn];
|
||||
}
|
||||
|
||||
if (sortedColumn) {
|
||||
if (ascending) {
|
||||
trialDetails.sort((a, b) =>
|
||||
getAttribute(a) > getAttribute(b) ? 1 : -1,
|
||||
);
|
||||
} else if (!ascending) {
|
||||
trialDetails.sort((a, b) =>
|
||||
getAttribute(a) < getAttribute(b) ? 1 : -1,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return trialDetails;
|
||||
};
|
||||
|
||||
handleMetricChoiceChange = (name: string) => (
|
||||
event: React.ChangeEvent<HTMLInputElement>,
|
||||
) => {
|
||||
let { metricColumns } = this.state;
|
||||
if (event.target.checked) {
|
||||
metricColumns.push(name);
|
||||
this.setState({
|
||||
metricColumns: metricColumns,
|
||||
});
|
||||
} else {
|
||||
metricColumns = metricColumns.filter((value) => value !== name);
|
||||
this.setState({
|
||||
metricColumns: metricColumns,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
metricChoices = (metricNames: string[]) => {
|
||||
const { metricColumns } = this.state;
|
||||
|
||||
return (
|
||||
<FormControl>
|
||||
<FormLabel component="legend">Select Metrics </FormLabel>
|
||||
<FormGroup>
|
||||
{metricNames.map((value) => (
|
||||
<FormControlLabel
|
||||
control={
|
||||
<Checkbox
|
||||
checked={metricColumns.includes(value)}
|
||||
onChange={this.handleMetricChoiceChange(value)}
|
||||
value={value}
|
||||
color="primary"
|
||||
/>
|
||||
}
|
||||
label={value}
|
||||
/>
|
||||
))}
|
||||
</FormGroup>
|
||||
</FormControl>
|
||||
);
|
||||
};
|
||||
|
||||
handleParamChoiceChange = (name: string) => (
|
||||
event: React.ChangeEvent<HTMLInputElement>,
|
||||
) => {
|
||||
let { paramColumns } = this.state;
|
||||
if (event.target.checked) {
|
||||
paramColumns.push(name);
|
||||
this.setState({
|
||||
paramColumns: paramColumns,
|
||||
});
|
||||
} else {
|
||||
paramColumns = paramColumns.filter((value) => value !== name);
|
||||
this.setState({
|
||||
paramColumns: paramColumns,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
paramChoices = (paramNames: string[]) => {
|
||||
const { classes } = this.props;
|
||||
const { paramColumns } = this.state;
|
||||
return (
|
||||
<FormControl className={classes.paramChecklist}>
|
||||
<FormLabel component="legend">Select Parameters </FormLabel>
|
||||
<FormGroup>
|
||||
{paramNames.map((value) => (
|
||||
<FormControlLabel
|
||||
control={
|
||||
<Checkbox
|
||||
checked={paramColumns.includes(value)}
|
||||
onChange={this.handleParamChoiceChange(value)}
|
||||
value={value}
|
||||
color="primary"
|
||||
/>
|
||||
}
|
||||
label={value}
|
||||
/>
|
||||
))}
|
||||
</FormGroup>
|
||||
</FormControl>
|
||||
);
|
||||
};
|
||||
|
||||
render() {
|
||||
const { classes, tuneInfo } = this.props;
|
||||
|
||||
const { metricColumns, paramColumns, open, errorTrial } = this.state;
|
||||
|
||||
if (
|
||||
tuneInfo === null ||
|
||||
Object.keys(tuneInfo["trial_records"]).length === 0
|
||||
) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const firstTrial = Object.keys(tuneInfo.trial_records)[0];
|
||||
const paramsDict = tuneInfo.trial_records[firstTrial].params;
|
||||
const paramNames = Object.keys(paramsDict).filter((k) => k !== "args");
|
||||
|
||||
let viewableParams = paramNames;
|
||||
const paramOptions = paramNames.length > 3;
|
||||
if (paramOptions) {
|
||||
if (paramColumns.length === 0) {
|
||||
this.setState({
|
||||
paramColumns: paramNames.slice(0, 3),
|
||||
});
|
||||
}
|
||||
viewableParams = paramColumns;
|
||||
}
|
||||
|
||||
const metricNames = Object.keys(tuneInfo.trial_records[firstTrial].metrics);
|
||||
|
||||
let viewableMetrics = metricNames;
|
||||
const metricOptions = metricNames.length > 3;
|
||||
if (metricOptions) {
|
||||
if (metricColumns.length === 0) {
|
||||
this.setState({
|
||||
metricColumns: metricNames.slice(0, 3),
|
||||
});
|
||||
}
|
||||
viewableMetrics = metricColumns;
|
||||
}
|
||||
|
||||
const trialDetails = this.sortedTrialRecords();
|
||||
|
||||
return (
|
||||
<div className={classes.root}>
|
||||
<Grid container spacing={0}>
|
||||
{(paramOptions || metricOptions) && (
|
||||
<Grid item xs={2} className={classes.checkboxRoot}>
|
||||
{paramOptions && this.paramChoices(paramNames)}
|
||||
{metricOptions && this.metricChoices(metricNames)}
|
||||
</Grid>
|
||||
)}
|
||||
<Grid
|
||||
item
|
||||
xs={paramOptions || metricOptions ? 10 : 12}
|
||||
className={classes.table}
|
||||
>
|
||||
<Table stickyHeader>
|
||||
<TableHead>
|
||||
<TableRow>
|
||||
{this.sortedCell("trial_id")}
|
||||
{this.sortedCell("job_id")}
|
||||
{this.sortedCell("start_time")}
|
||||
{viewableParams.map((value, index) =>
|
||||
this.sortedCell("params", value, index),
|
||||
)}
|
||||
{this.sortedCell("status")}
|
||||
{viewableMetrics.map((value, index) =>
|
||||
this.sortedCell("metrics", value, index),
|
||||
)}
|
||||
<TableCell className={classes.cell} key="error">
|
||||
Error
|
||||
</TableCell>
|
||||
</TableRow>
|
||||
</TableHead>
|
||||
<TableBody>
|
||||
{trialDetails !== null &&
|
||||
trialDetails.map((trial, index) => (
|
||||
<TableRow key={index}>
|
||||
<TableCell className={classes.cell}>
|
||||
{trial["trial_id"]}
|
||||
</TableCell>
|
||||
<TableCell className={classes.cell}>
|
||||
{trial["job_id"]}
|
||||
</TableCell>
|
||||
<TableCell className={classes.cell}>
|
||||
{trial["start_time"]}
|
||||
</TableCell>
|
||||
{viewableParams.map((value, index) => (
|
||||
<TableCell className={classes.cell} key={index}>
|
||||
{typeof trial["params"][value] === "number"
|
||||
? formatValue(Number(trial["params"][value]))
|
||||
: trial["params"][value]}
|
||||
</TableCell>
|
||||
))}
|
||||
<TableCell className={classes.cell}>
|
||||
{trial["status"]}
|
||||
</TableCell>
|
||||
{trial["metrics"] &&
|
||||
viewableMetrics.map((value, index) => (
|
||||
<TableCell className={classes.cell} key={index}>
|
||||
{typeof trial["metrics"][value] === "number"
|
||||
? formatValue(Number(trial["metrics"][value]))
|
||||
: trial["metrics"][value]}
|
||||
</TableCell>
|
||||
))}
|
||||
<TableCell className={classes.cell}>
|
||||
{trial["error"] === "No Error" ? (
|
||||
"No Error"
|
||||
) : (
|
||||
<Link
|
||||
component="button"
|
||||
variant="body2"
|
||||
onClick={() => {
|
||||
this.handleOpen(trial["trial_id"]);
|
||||
}}
|
||||
>
|
||||
Show Error
|
||||
</Link>
|
||||
)}
|
||||
</TableCell>
|
||||
</TableRow>
|
||||
))}
|
||||
</TableBody>
|
||||
</Table>
|
||||
</Grid>
|
||||
</Grid>
|
||||
{open && (
|
||||
<DialogWithTitle handleClose={this.handleClose} title="Error Log">
|
||||
{open && (
|
||||
<NumberedLines
|
||||
lines={tuneInfo.trial_records[errorTrial].error
|
||||
.trim()
|
||||
.split("\n")}
|
||||
/>
|
||||
)}
|
||||
</DialogWithTitle>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default connect(
|
||||
mapStateToProps,
|
||||
mapDispatchToProps,
|
||||
)(withStyles(styles)(TuneTable));
|
||||
@@ -1,137 +0,0 @@
|
||||
import {
|
||||
Button,
|
||||
CircularProgress,
|
||||
createStyles,
|
||||
Theme,
|
||||
Typography,
|
||||
withStyles,
|
||||
WithStyles,
|
||||
} from "@material-ui/core";
|
||||
import React from "react";
|
||||
import { connect } from "react-redux";
|
||||
import { enableTuneTensorBoard } from "../../../api";
|
||||
import { StoreState } from "../../../store";
|
||||
import { dashboardActions } from "../state";
|
||||
|
||||
const styles = (theme: Theme) =>
|
||||
createStyles({
|
||||
root: {
|
||||
backgroundColor: theme.palette.background.paper,
|
||||
padding: theme.spacing(2),
|
||||
"& > :not(:first-child)": {
|
||||
marginTop: theme.spacing(4),
|
||||
},
|
||||
},
|
||||
board: {
|
||||
width: "100%",
|
||||
height: "1000px",
|
||||
border: "none",
|
||||
},
|
||||
warning: {
|
||||
fontSize: "0.8125rem",
|
||||
},
|
||||
progress: {
|
||||
marginLeft: "10px",
|
||||
marginTop: "2px",
|
||||
},
|
||||
});
|
||||
|
||||
const mapStateToProps = (state: StoreState) => ({
|
||||
error: state.dashboard.error,
|
||||
tuneInfo: state.dashboard.tuneInfo,
|
||||
});
|
||||
|
||||
type State = {
|
||||
tensorBoardEnabled: boolean;
|
||||
loading: boolean;
|
||||
};
|
||||
|
||||
const mapDispatchToProps = dashboardActions;
|
||||
|
||||
class TuneTensorBoard extends React.Component<
|
||||
WithStyles<typeof styles> &
|
||||
ReturnType<typeof mapStateToProps> &
|
||||
typeof mapDispatchToProps,
|
||||
State
|
||||
> {
|
||||
state: State = {
|
||||
tensorBoardEnabled: false,
|
||||
loading: false,
|
||||
};
|
||||
|
||||
enableTensorBoard() {
|
||||
enableTuneTensorBoard();
|
||||
this.setState({
|
||||
tensorBoardEnabled: true,
|
||||
});
|
||||
}
|
||||
|
||||
handleSubmit = () => {
|
||||
this.setState({ loading: true });
|
||||
enableTuneTensorBoard().then(() => {
|
||||
this.setState({ loading: false });
|
||||
});
|
||||
};
|
||||
|
||||
tensorBoard = () => {
|
||||
const { classes, error, tuneInfo } = this.props;
|
||||
|
||||
return (
|
||||
<div>
|
||||
{error === "TypeError: Failed to fetch" && (
|
||||
<Typography className={classes.warning} color="textSecondary">
|
||||
Warning: Tensorboard server closed. View Tensorboard by running
|
||||
"tensorboard --logdir" if not displaying below.
|
||||
</Typography>
|
||||
)}
|
||||
{tuneInfo && !tuneInfo.tensorboard.tensorboard_current && (
|
||||
<Typography className={classes.warning} color="textSecondary">
|
||||
The below Tensorboard reflects a previously entered log directory.
|
||||
Restart the Ray Dashboard to change the Tensorboard logdir.
|
||||
</Typography>
|
||||
)}
|
||||
<iframe
|
||||
src="http://localhost:6006/"
|
||||
className={classes.board}
|
||||
title="TensorBoard"
|
||||
></iframe>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
render() {
|
||||
const { classes, tuneInfo } = this.props;
|
||||
|
||||
const { loading } = this.state;
|
||||
|
||||
if (tuneInfo === null) {
|
||||
return;
|
||||
}
|
||||
const enabled = tuneInfo.tensorboard.tensorboard_enabled;
|
||||
return (
|
||||
<div className={classes.root}>
|
||||
{!enabled && (
|
||||
<div>
|
||||
<Button
|
||||
variant="outlined"
|
||||
onClick={this.handleSubmit}
|
||||
className={classes.warning}
|
||||
>
|
||||
Enable TensorBoard
|
||||
</Button>
|
||||
{loading && (
|
||||
<CircularProgress className={classes.progress} size={25} />
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
|
||||
{enabled && this.tensorBoard()}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default connect(
|
||||
mapStateToProps,
|
||||
mapDispatchToProps,
|
||||
)(withStyles(styles)(TuneTensorBoard));
|
||||
@@ -1 +0,0 @@
|
||||
/// <reference types="react-scripts" />
|
||||
@@ -1,11 +0,0 @@
|
||||
import { configureStore } from "@reduxjs/toolkit";
|
||||
import { dashboardReducer } from "./pages/dashboard/state";
|
||||
|
||||
export const store = configureStore({
|
||||
reducer: {
|
||||
dashboard: dashboardReducer,
|
||||
},
|
||||
devTools: process.env.NODE_ENV === "development",
|
||||
});
|
||||
|
||||
export type StoreState = ReturnType<typeof store.getState>;
|
||||
@@ -1,25 +0,0 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "es5",
|
||||
"lib": [
|
||||
"dom",
|
||||
"dom.iterable",
|
||||
"esnext"
|
||||
],
|
||||
"allowJs": true,
|
||||
"skipLibCheck": true,
|
||||
"esModuleInterop": true,
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"strict": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"module": "esnext",
|
||||
"moduleResolution": "node",
|
||||
"resolveJsonModule": true,
|
||||
"isolatedModules": true,
|
||||
"noEmit": true,
|
||||
"jsx": "react"
|
||||
},
|
||||
"include": [
|
||||
"src"
|
||||
]
|
||||
}
|
||||
@@ -1,975 +0,0 @@
|
||||
try:
|
||||
import aiohttp.web
|
||||
except ImportError:
|
||||
print("The dashboard requires aiohttp to run.")
|
||||
import sys
|
||||
sys.exit(1)
|
||||
|
||||
import argparse
|
||||
import copy
|
||||
import datetime
|
||||
import errno
|
||||
import json
|
||||
import logging
|
||||
import os
|
||||
import platform
|
||||
import threading
|
||||
import time
|
||||
import traceback
|
||||
import yaml
|
||||
import uuid
|
||||
import grpc
|
||||
from google.protobuf.json_format import MessageToDict
|
||||
import ray
|
||||
import ray.ray_constants as ray_constants
|
||||
|
||||
from ray.core.generated import node_manager_pb2
|
||||
from ray.core.generated import node_manager_pb2_grpc
|
||||
from ray.core.generated import reporter_pb2
|
||||
from ray.core.generated import reporter_pb2_grpc
|
||||
from ray.core.generated import core_worker_pb2
|
||||
from ray.core.generated import core_worker_pb2_grpc
|
||||
from ray.dashboard.interface import BaseDashboardController
|
||||
from ray.dashboard.interface import BaseDashboardRouteHandler
|
||||
from ray.dashboard.memory import construct_memory_table, MemoryTable, \
|
||||
GroupByType, SortingType
|
||||
from ray.dashboard.metrics_exporter.client import Exporter
|
||||
from ray.dashboard.metrics_exporter.client import MetricsExportClient
|
||||
from ray.dashboard.node_stats import NodeStats
|
||||
from ray.dashboard.util import to_unix_time
|
||||
from ray.metrics_agent import PrometheusServiceDiscoveryWriter
|
||||
|
||||
try:
|
||||
from ray.tune import Analysis
|
||||
from tensorboard import program
|
||||
except ImportError:
|
||||
Analysis = None
|
||||
|
||||
# Logger for this module. It should be configured at the entry point
|
||||
# into the program using Ray. Ray provides a default configuration at
|
||||
# entry/init points.
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
async def json_response(is_dev, result=None, error=None,
|
||||
ts=None) -> aiohttp.web.Response:
|
||||
if ts is None:
|
||||
ts = datetime.datetime.utcnow()
|
||||
|
||||
headers = None
|
||||
if is_dev:
|
||||
headers = {"Access-Control-Allow-Origin": "*"}
|
||||
|
||||
return aiohttp.web.json_response(
|
||||
{
|
||||
"result": result,
|
||||
"timestamp": to_unix_time(ts),
|
||||
"error": error,
|
||||
},
|
||||
headers=headers)
|
||||
|
||||
|
||||
class DashboardController(BaseDashboardController):
|
||||
def __init__(self, redis_address, redis_password):
|
||||
self.node_stats = NodeStats(redis_address, redis_password)
|
||||
self.raylet_stats = RayletStats(
|
||||
redis_address, redis_password=redis_password)
|
||||
if Analysis is not None:
|
||||
self.tune_stats = TuneCollector(2.0)
|
||||
self.memory_table = MemoryTable([])
|
||||
|
||||
def _construct_raylet_info(self):
|
||||
D = self.raylet_stats.get_raylet_stats()
|
||||
workers_info_by_node = {
|
||||
data["nodeId"]: data.get("coreWorkersStats")
|
||||
for data in D.values()
|
||||
}
|
||||
|
||||
infeasible_tasks = sum(
|
||||
(data.get("infeasibleTasks", []) for data in D.values()), [])
|
||||
# ready_tasks are used to render tasks that are not schedulable
|
||||
# due to resource limitations.
|
||||
# (e.g., Actor requires 2 GPUs but there is only 1 gpu available).
|
||||
ready_tasks = sum((data.get("readyTasks", []) for data in D.values()),
|
||||
[])
|
||||
actor_groups = self.node_stats.get_actors(
|
||||
workers_info_by_node, infeasible_tasks, ready_tasks)
|
||||
plasma_stats = {}
|
||||
# HTTP call to metrics port for each node in nodes/
|
||||
used_views = ("object_store_num_local_objects",
|
||||
"object_store_available_memory",
|
||||
"object_store_used_memory")
|
||||
for address, data in D.items():
|
||||
# process view data
|
||||
views = [
|
||||
view for view in data.get("viewData", [])
|
||||
if view.get("viewName") in used_views
|
||||
]
|
||||
node_plasma_stats = {}
|
||||
for view in views:
|
||||
view_name = view["viewName"]
|
||||
view_measures = view["measures"]
|
||||
if view_measures:
|
||||
view_data = view_measures[0].get("doubleValue", .0)
|
||||
else:
|
||||
view_data = .0
|
||||
node_plasma_stats[view_name] = view_data
|
||||
plasma_stats[address] = node_plasma_stats
|
||||
|
||||
return {
|
||||
"nodes": D,
|
||||
"actorGroups": actor_groups,
|
||||
"plasmaStats": plasma_stats
|
||||
}
|
||||
|
||||
def get_ray_config(self):
|
||||
try:
|
||||
config_path = os.path.expanduser("~/ray_bootstrap_config.yaml")
|
||||
with open(config_path) as f:
|
||||
cfg = yaml.safe_load(f)
|
||||
except Exception:
|
||||
error = "No config"
|
||||
return error, None
|
||||
|
||||
D = {
|
||||
"min_workers": cfg["min_workers"],
|
||||
"max_workers": cfg["max_workers"],
|
||||
"initial_workers": cfg["initial_workers"],
|
||||
"autoscaling_mode": cfg["autoscaling_mode"],
|
||||
"idle_timeout_minutes": cfg["idle_timeout_minutes"],
|
||||
}
|
||||
|
||||
try:
|
||||
D["head_type"] = cfg["head_node"]["InstanceType"]
|
||||
except KeyError:
|
||||
D["head_type"] = "unknown"
|
||||
|
||||
try:
|
||||
D["worker_type"] = cfg["worker_nodes"]["InstanceType"]
|
||||
except KeyError:
|
||||
D["worker_type"] = "unknown"
|
||||
|
||||
return None, D
|
||||
|
||||
def get_node_info(self):
|
||||
return self.node_stats.get_node_stats()
|
||||
|
||||
def get_raylet_info(self):
|
||||
return self._construct_raylet_info()
|
||||
|
||||
def get_memory_table_info(self,
|
||||
group_by=GroupByType.NODE_ADDRESS,
|
||||
sort_by=SortingType.OBJECT_SIZE) -> MemoryTable:
|
||||
# Collecting memory info adds big overhead to the cluster.
|
||||
# This must be collected only when it is necessary.
|
||||
self.raylet_stats.include_memory_info = True
|
||||
D = self.raylet_stats.get_raylet_stats()
|
||||
workers_info_by_node = {
|
||||
data["nodeId"]: data.get("workersStats")
|
||||
for data in D.values()
|
||||
}
|
||||
self.memory_table = construct_memory_table(
|
||||
workers_info_by_node, group_by=group_by, sort_by=sort_by)
|
||||
return self.memory_table
|
||||
|
||||
def stop_collecting_memory_table_info(self):
|
||||
self.raylet_stats.include_memory_info = False
|
||||
|
||||
def tune_info(self):
|
||||
if Analysis is not None:
|
||||
D = self.tune_stats.get_stats()
|
||||
else:
|
||||
D = {}
|
||||
return D
|
||||
|
||||
def tune_availability(self):
|
||||
if Analysis is not None:
|
||||
D = self.tune_stats.get_availability()
|
||||
else:
|
||||
D = {"available": False, "trials_available": False}
|
||||
return D
|
||||
|
||||
def set_tune_experiment(self, experiment):
|
||||
if Analysis is not None:
|
||||
return self.tune_stats.set_experiment(experiment)
|
||||
return "Tune Not Enabled", None
|
||||
|
||||
def enable_tune_tensorboard(self):
|
||||
if Analysis is not None:
|
||||
self.tune_stats.enable_tensorboard()
|
||||
|
||||
def launch_profiling(self, node_id, pid, duration):
|
||||
profiling_id = self.raylet_stats.launch_profiling(
|
||||
node_id=node_id, pid=pid, duration=duration)
|
||||
return profiling_id
|
||||
|
||||
def check_profiling_status(self, profiling_id):
|
||||
return self.raylet_stats.check_profiling_status(profiling_id)
|
||||
|
||||
def get_profiling_info(self, profiling_id):
|
||||
return self.raylet_stats.get_profiling_info(profiling_id)
|
||||
|
||||
def kill_actor(self, actor_id, ip_address, port):
|
||||
return self.raylet_stats.kill_actor(actor_id, ip_address, port)
|
||||
|
||||
def get_logs(self, hostname, pid):
|
||||
return self.node_stats.get_logs(hostname, pid)
|
||||
|
||||
def get_errors(self, hostname, pid):
|
||||
return self.node_stats.get_errors(hostname, pid)
|
||||
|
||||
def start_collecting_metrics(self):
|
||||
self.node_stats.start()
|
||||
self.raylet_stats.start()
|
||||
if Analysis is not None:
|
||||
self.tune_stats.start()
|
||||
|
||||
|
||||
class DashboardRouteHandler(BaseDashboardRouteHandler):
|
||||
def __init__(self, dashboard_controller: DashboardController,
|
||||
is_dev=False):
|
||||
self.dashboard_controller = dashboard_controller
|
||||
self.is_dev = is_dev
|
||||
|
||||
def forbidden(self) -> aiohttp.web.Response:
|
||||
return aiohttp.web.Response(status=403, text="403 Forbidden")
|
||||
|
||||
async def get_forbidden(self, _) -> aiohttp.web.Response:
|
||||
return self.forbidden()
|
||||
|
||||
async def get_index(self, req) -> aiohttp.web.Response:
|
||||
return aiohttp.web.FileResponse(
|
||||
os.path.join(
|
||||
os.path.dirname(os.path.abspath(__file__)),
|
||||
"client/build/index.html"))
|
||||
|
||||
async def get_favicon(self, req) -> aiohttp.web.Response:
|
||||
return aiohttp.web.FileResponse(
|
||||
os.path.join(
|
||||
os.path.dirname(os.path.abspath(__file__)),
|
||||
"client/build/favicon.ico"))
|
||||
|
||||
async def ray_config(self, req) -> aiohttp.web.Response:
|
||||
error, result = self.dashboard_controller.get_ray_config()
|
||||
if error:
|
||||
return await json_response(self.is_dev, error=error)
|
||||
return await json_response(self.is_dev, result=result)
|
||||
|
||||
async def node_info(self, req) -> aiohttp.web.Response:
|
||||
now = datetime.datetime.utcnow()
|
||||
D = self.dashboard_controller.get_node_info()
|
||||
return await json_response(self.is_dev, result=D, ts=now)
|
||||
|
||||
async def raylet_info(self, req) -> aiohttp.web.Response:
|
||||
result = self.dashboard_controller.get_raylet_info()
|
||||
return await json_response(self.is_dev, result=result)
|
||||
|
||||
async def memory_table_info(self, req) -> aiohttp.web.Response:
|
||||
group_by = req.query.get("group_by")
|
||||
sort_by = req.query.get("sort_by")
|
||||
kwargs = {}
|
||||
try:
|
||||
if group_by:
|
||||
kwargs["group_by"] = GroupByType(group_by)
|
||||
if sort_by:
|
||||
kwargs["sort_by"] = SortingType(sort_by)
|
||||
except ValueError as e:
|
||||
return aiohttp.web.HTTPBadRequest(reason=str(e))
|
||||
|
||||
memory_table = self.dashboard_controller.get_memory_table_info(
|
||||
**kwargs)
|
||||
return await json_response(self.is_dev, result=memory_table.__dict__())
|
||||
|
||||
async def stop_collecting_memory_table_info(self,
|
||||
req) -> aiohttp.web.Response:
|
||||
self.dashboard_controller.stop_collecting_memory_table_info()
|
||||
return await json_response(self.is_dev, result={})
|
||||
|
||||
async def tune_info(self, req) -> aiohttp.web.Response:
|
||||
result = self.dashboard_controller.tune_info()
|
||||
return await json_response(self.is_dev, result=result)
|
||||
|
||||
async def tune_availability(self, req) -> aiohttp.web.Response:
|
||||
result = self.dashboard_controller.tune_availability()
|
||||
return await json_response(self.is_dev, result=result)
|
||||
|
||||
async def set_tune_experiment(self, req) -> aiohttp.web.Response:
|
||||
data = await req.json()
|
||||
error, result = self.dashboard_controller.set_tune_experiment(
|
||||
data["experiment"])
|
||||
if error:
|
||||
return await json_response(self.is_dev, error=error)
|
||||
return await json_response(self.is_dev, result=result)
|
||||
|
||||
async def enable_tune_tensorboard(self, req) -> aiohttp.web.Response:
|
||||
self.dashboard_controller.enable_tune_tensorboard()
|
||||
return await json_response(self.is_dev, result={})
|
||||
|
||||
async def launch_profiling(self, req) -> aiohttp.web.Response:
|
||||
node_id = req.query.get("node_id")
|
||||
pid = int(req.query.get("pid"))
|
||||
duration = int(req.query.get("duration"))
|
||||
profiling_id = self.dashboard_controller.launch_profiling(
|
||||
node_id, pid, duration)
|
||||
return await json_response(self.is_dev, result=str(profiling_id))
|
||||
|
||||
async def check_profiling_status(self, req) -> aiohttp.web.Response:
|
||||
profiling_id = req.query.get("profiling_id")
|
||||
status = self.dashboard_controller.check_profiling_status(profiling_id)
|
||||
return await json_response(self.is_dev, result=status)
|
||||
|
||||
async def get_profiling_info(self, req) -> aiohttp.web.Response:
|
||||
profiling_id = req.query.get("profiling_id")
|
||||
profiling_info = self.dashboard_controller.get_profiling_info(
|
||||
profiling_id)
|
||||
return aiohttp.web.json_response(profiling_info)
|
||||
|
||||
async def kill_actor(self, req) -> aiohttp.web.Response:
|
||||
actor_id = req.query.get("actor_id")
|
||||
ip_address = req.query.get("ip_address")
|
||||
port = req.query.get("port")
|
||||
return await json_response(
|
||||
self.is_dev,
|
||||
self.dashboard_controller.kill_actor(actor_id, ip_address, port))
|
||||
|
||||
async def logs(self, req) -> aiohttp.web.Response:
|
||||
hostname = req.query.get("hostname")
|
||||
pid = req.query.get("pid")
|
||||
result = self.dashboard_controller.get_logs(hostname, pid)
|
||||
return await json_response(self.is_dev, result=result)
|
||||
|
||||
async def errors(self, req) -> aiohttp.web.Response:
|
||||
hostname = req.query.get("hostname")
|
||||
pid = req.query.get("pid")
|
||||
result = self.dashboard_controller.get_errors(hostname, pid)
|
||||
return await json_response(self.is_dev, result=result)
|
||||
|
||||
|
||||
class MetricsExportHandler:
|
||||
def __init__(self,
|
||||
dashboard_controller: DashboardController,
|
||||
metrics_export_client: MetricsExportClient,
|
||||
dashboard_id,
|
||||
is_dev=False):
|
||||
assert metrics_export_client is not None
|
||||
self.metrics_export_client = metrics_export_client
|
||||
self.dashboard_controller = dashboard_controller
|
||||
self.is_dev = is_dev
|
||||
|
||||
async def enable_export_metrics(self, req) -> aiohttp.web.Response:
|
||||
if self.metrics_export_client.enabled:
|
||||
return await json_response(
|
||||
self.is_dev, result={"url": None}, error="Already enabled")
|
||||
|
||||
succeed, error = self.metrics_export_client.start_exporting_metrics()
|
||||
error_msg = "Failed to enable it. Error: {}".format(error)
|
||||
if not succeed:
|
||||
return await json_response(
|
||||
self.is_dev, result={"url": None}, error=error_msg)
|
||||
|
||||
url = self.metrics_export_client.dashboard_url
|
||||
return await json_response(self.is_dev, result={"url": url})
|
||||
|
||||
async def get_dashboard_address(self, req) -> aiohttp.web.Response:
|
||||
if not self.metrics_export_client.enabled:
|
||||
return await json_response(
|
||||
self.is_dev,
|
||||
result={"url": None},
|
||||
error="Metrics exporting is not enabled.")
|
||||
|
||||
url = self.metrics_export_client.dashboard_url
|
||||
return await json_response(self.is_dev, result={"url": url})
|
||||
|
||||
async def redirect_to_dashboard(self, req) -> aiohttp.web.Response:
|
||||
if not self.metrics_export_client.enabled:
|
||||
return await json_response(
|
||||
self.is_dev,
|
||||
result={"url": None},
|
||||
error="You should enable metrics export to use this endpoint.")
|
||||
|
||||
raise aiohttp.web.HTTPFound(self.metrics_export_client.dashboard_url)
|
||||
|
||||
|
||||
def setup_metrics_export_routes(app: aiohttp.web.Application,
|
||||
handler: MetricsExportHandler):
|
||||
"""Routes that require dynamically changing class attributes."""
|
||||
app.router.add_get("/api/metrics/enable", handler.enable_export_metrics)
|
||||
app.router.add_get("/api/metrics/url", handler.get_dashboard_address)
|
||||
app.router.add_get("/metrics/redirect", handler.redirect_to_dashboard)
|
||||
|
||||
|
||||
def setup_static_dir(app):
|
||||
build_dir = os.path.join(
|
||||
os.path.dirname(os.path.abspath(__file__)), "client/build")
|
||||
if not os.path.isdir(build_dir):
|
||||
raise OSError(
|
||||
errno.ENOENT, "Dashboard build directory not found. If installing "
|
||||
"from source, please follow the additional steps "
|
||||
"required to build the dashboard"
|
||||
"(cd python/ray/dashboard/client "
|
||||
"&& npm ci "
|
||||
"&& npm run build)", build_dir)
|
||||
|
||||
static_dir = os.path.join(build_dir, "static")
|
||||
app.router.add_static("/static", static_dir)
|
||||
return build_dir
|
||||
|
||||
|
||||
def setup_speedscope_dir(app, build_dir):
|
||||
speedscope_dir = os.path.join(build_dir, "speedscope-1.5.3")
|
||||
app.router.add_static("/speedscope", speedscope_dir)
|
||||
|
||||
|
||||
def setup_dashboard_route(app: aiohttp.web.Application,
|
||||
handler: BaseDashboardRouteHandler,
|
||||
index=None,
|
||||
favicon=None,
|
||||
ray_config=None,
|
||||
node_info=None,
|
||||
raylet_info=None,
|
||||
tune_info=None,
|
||||
tune_availability=None,
|
||||
launch_profiling=None,
|
||||
check_profiling_status=None,
|
||||
get_profiling_info=None,
|
||||
kill_actor=None,
|
||||
logs=None,
|
||||
errors=None,
|
||||
memory_table=None,
|
||||
stop_memory_table=None):
|
||||
def add_get_route(route, handler_func):
|
||||
if route is not None:
|
||||
app.router.add_get(route, handler_func)
|
||||
|
||||
add_get_route(index, handler.get_index)
|
||||
add_get_route(favicon, handler.get_favicon)
|
||||
add_get_route(ray_config, handler.ray_config)
|
||||
add_get_route(node_info, handler.node_info)
|
||||
add_get_route(raylet_info, handler.raylet_info)
|
||||
add_get_route(tune_info, handler.tune_info)
|
||||
add_get_route(tune_availability, handler.tune_availability)
|
||||
add_get_route(launch_profiling, handler.launch_profiling)
|
||||
add_get_route(check_profiling_status, handler.check_profiling_status)
|
||||
add_get_route(get_profiling_info, handler.get_profiling_info)
|
||||
add_get_route(kill_actor, handler.kill_actor)
|
||||
add_get_route(logs, handler.logs)
|
||||
add_get_route(errors, handler.errors)
|
||||
add_get_route(memory_table, handler.memory_table_info)
|
||||
add_get_route(stop_memory_table, handler.stop_collecting_memory_table_info)
|
||||
|
||||
|
||||
class Dashboard:
|
||||
"""A dashboard process for monitoring Ray nodes.
|
||||
|
||||
This dashboard is made up of a REST API which collates data published by
|
||||
Reporter processes on nodes into a json structure, and a webserver
|
||||
which polls said API for display purposes.
|
||||
|
||||
Args:
|
||||
host(str): Host address of dashboard aiohttp server.
|
||||
port(str): Port number of dashboard aiohttp server.
|
||||
redis_address(str): GCS address of a Ray cluster
|
||||
temp_dir (str): The temporary directory used for log files and
|
||||
information for this Ray session.
|
||||
redis_passord(str): Redis password to access GCS
|
||||
metrics_export_address(str): The address users host their dashboard.
|
||||
"""
|
||||
|
||||
def __init__(self,
|
||||
host,
|
||||
port,
|
||||
redis_address,
|
||||
temp_dir,
|
||||
redis_password=None,
|
||||
metrics_export_address=None):
|
||||
self.host = host
|
||||
self.port = port
|
||||
self.redis_client = ray._private.services.create_redis_client(
|
||||
redis_address, password=redis_password)
|
||||
self.temp_dir = temp_dir
|
||||
self.dashboard_id = str(uuid.uuid4())
|
||||
self.dashboard_controller = DashboardController(
|
||||
redis_address, redis_password)
|
||||
self.service_discovery = PrometheusServiceDiscoveryWriter(
|
||||
redis_address, redis_password, temp_dir)
|
||||
|
||||
# Setting the environment variable RAY_DASHBOARD_DEV=1 disables some
|
||||
# security checks in the dashboard server to ease development while
|
||||
# using the React dev server. Specifically, when this option is set, we
|
||||
# allow cross-origin requests to be made.
|
||||
self.is_dev = os.environ.get("RAY_DASHBOARD_DEV") == "1"
|
||||
|
||||
self.app = aiohttp.web.Application()
|
||||
route_handler = DashboardRouteHandler(
|
||||
self.dashboard_controller, is_dev=self.is_dev)
|
||||
|
||||
# Setup Metrics exporting service if necessary.
|
||||
self.metrics_export_address = metrics_export_address
|
||||
if self.metrics_export_address:
|
||||
self._setup_metrics_export()
|
||||
|
||||
# Setup Dashboard Routes
|
||||
build_dir = setup_static_dir(self.app)
|
||||
setup_speedscope_dir(self.app, build_dir)
|
||||
setup_dashboard_route(
|
||||
self.app,
|
||||
route_handler,
|
||||
index="/",
|
||||
favicon="/favicon.ico",
|
||||
ray_config="/api/ray_config",
|
||||
node_info="/api/node_info",
|
||||
raylet_info="/api/raylet_info",
|
||||
tune_info="/api/tune_info",
|
||||
tune_availability="/api/tune_availability",
|
||||
launch_profiling="/api/launch_profiling",
|
||||
check_profiling_status="/api/check_profiling_status",
|
||||
get_profiling_info="/api/get_profiling_info",
|
||||
kill_actor="/api/kill_actor",
|
||||
logs="/api/logs",
|
||||
errors="/api/errors",
|
||||
memory_table="/api/memory_table",
|
||||
stop_memory_table="/api/stop_memory_table")
|
||||
self.app.router.add_get("/{_}", route_handler.get_forbidden)
|
||||
self.app.router.add_post("/api/set_tune_experiment",
|
||||
route_handler.set_tune_experiment)
|
||||
self.app.router.add_post("/api/enable_tune_tensorboard",
|
||||
route_handler.enable_tune_tensorboard)
|
||||
|
||||
def _setup_metrics_export(self):
|
||||
exporter = Exporter(self.dashboard_id, self.metrics_export_address,
|
||||
self.dashboard_controller)
|
||||
self.metrics_export_client = MetricsExportClient(
|
||||
self.metrics_export_address, self.dashboard_controller,
|
||||
self.dashboard_id, exporter)
|
||||
|
||||
# Setup endpoints
|
||||
metrics_export_handler = MetricsExportHandler(
|
||||
self.dashboard_controller,
|
||||
self.metrics_export_client,
|
||||
self.dashboard_id,
|
||||
is_dev=self.is_dev)
|
||||
setup_metrics_export_routes(self.app, metrics_export_handler)
|
||||
|
||||
def _start_exporting_metrics(self):
|
||||
result, error = self.metrics_export_client.start_exporting_metrics()
|
||||
if not result and error:
|
||||
url = ray._private.services.get_webui_url_from_redis(
|
||||
self.redis_client)
|
||||
error += (" Please reenable the metrics export by going to "
|
||||
"the url: {}/api/metrics/enable".format(url))
|
||||
ray.utils.push_error_to_driver_through_redis(
|
||||
self.redis_client, "metrics export failed", error)
|
||||
|
||||
def log_dashboard_url(self):
|
||||
url = ray._private.services.get_webui_url_from_redis(self.redis_client)
|
||||
if url is None:
|
||||
raise ValueError("WebUI URL is not present in GCS.")
|
||||
with open(os.path.join(self.temp_dir, "dashboard_url"), "w") as f:
|
||||
f.write(url)
|
||||
logger.info("Dashboard running on {}".format(url))
|
||||
|
||||
def run(self):
|
||||
self.log_dashboard_url()
|
||||
self.dashboard_controller.start_collecting_metrics()
|
||||
self.service_discovery.start()
|
||||
if self.metrics_export_address:
|
||||
self._start_exporting_metrics()
|
||||
aiohttp.web.run_app(self.app, host=self.host, port=self.port)
|
||||
|
||||
|
||||
class RayletStats(threading.Thread):
|
||||
def __init__(self, redis_address, redis_password=None):
|
||||
self.nodes_lock = threading.Lock()
|
||||
self.nodes = []
|
||||
self.stubs = {}
|
||||
self.reporter_stubs = {}
|
||||
self.redis_client = ray._private.services.create_redis_client(
|
||||
redis_address, password=redis_password)
|
||||
|
||||
self._raylet_stats_lock = threading.Lock()
|
||||
self._raylet_stats = {}
|
||||
self._profiling_stats = {}
|
||||
|
||||
self._update_nodes()
|
||||
self.include_memory_info = False
|
||||
|
||||
super().__init__()
|
||||
|
||||
def _update_nodes(self):
|
||||
with self.nodes_lock:
|
||||
self.nodes = ray.nodes()
|
||||
node_ids = [node["NodeID"] for node in self.nodes]
|
||||
|
||||
# First remove node connections of disconnected nodes.
|
||||
for node_id in self.stubs.keys():
|
||||
if node_id not in node_ids:
|
||||
stub = self.stubs.pop(node_id)
|
||||
stub.close()
|
||||
reporter_stub = self.reporter_stubs.pop(node_id)
|
||||
reporter_stub.close()
|
||||
|
||||
# Now add node connections of new nodes.
|
||||
for node in self.nodes:
|
||||
node_id = node["NodeID"]
|
||||
if node_id not in self.stubs:
|
||||
node_ip = node["NodeManagerAddress"]
|
||||
channel = grpc.insecure_channel("{}:{}".format(
|
||||
node_ip, node["NodeManagerPort"]))
|
||||
stub = node_manager_pb2_grpc.NodeManagerServiceStub(
|
||||
channel)
|
||||
self.stubs[node_id] = stub
|
||||
# Block wait until the reporter for the node starts.
|
||||
while True:
|
||||
reporter_port = self.redis_client.get(
|
||||
"REPORTER_PORT:{}".format(node_ip))
|
||||
if reporter_port:
|
||||
break
|
||||
reporter_channel = grpc.insecure_channel("{}:{}".format(
|
||||
node_ip, int(reporter_port)))
|
||||
reporter_stub = reporter_pb2_grpc.ReporterServiceStub(
|
||||
reporter_channel)
|
||||
self.reporter_stubs[node_id] = reporter_stub
|
||||
|
||||
assert len(self.stubs) == len(
|
||||
self.reporter_stubs), (self.stubs.keys(),
|
||||
self.reporter_stubs.keys())
|
||||
|
||||
def get_raylet_stats(self):
|
||||
with self._raylet_stats_lock:
|
||||
return copy.deepcopy(self._raylet_stats)
|
||||
|
||||
def launch_profiling(self, node_id, pid, duration):
|
||||
profiling_id = str(uuid.uuid4())
|
||||
|
||||
def _callback(reply_future):
|
||||
reply = reply_future.result()
|
||||
with self._raylet_stats_lock:
|
||||
self._profiling_stats[profiling_id] = reply
|
||||
|
||||
reporter_stub = self.reporter_stubs[node_id]
|
||||
reply_future = reporter_stub.GetProfilingStats.future(
|
||||
reporter_pb2.GetProfilingStatsRequest(pid=pid, duration=duration))
|
||||
reply_future.add_done_callback(_callback)
|
||||
return profiling_id
|
||||
|
||||
def check_profiling_status(self, profiling_id):
|
||||
with self._raylet_stats_lock:
|
||||
is_present = profiling_id in self._profiling_stats
|
||||
if not is_present:
|
||||
return {"status": "pending"}
|
||||
|
||||
reply = self._profiling_stats[profiling_id]
|
||||
if reply.std_err:
|
||||
return {"status": "error", "error": reply.std_err}
|
||||
else:
|
||||
return {"status": "finished"}
|
||||
|
||||
def get_profiling_info(self, profiling_id):
|
||||
with self._raylet_stats_lock:
|
||||
profiling_stats = self._profiling_stats.get(profiling_id)
|
||||
assert profiling_stats, "profiling not finished"
|
||||
return json.loads(profiling_stats.profiling_stats)
|
||||
|
||||
def kill_actor(self, actor_id, ip_address, port):
|
||||
channel = grpc.insecure_channel("{}:{}".format(ip_address, int(port)))
|
||||
stub = core_worker_pb2_grpc.CoreWorkerServiceStub(channel)
|
||||
|
||||
def _callback(reply_future):
|
||||
_ = reply_future.result()
|
||||
|
||||
reply_future = stub.KillActor.future(
|
||||
core_worker_pb2.KillActorRequest(
|
||||
intended_actor_id=ray.utils.hex_to_binary(actor_id)))
|
||||
reply_future.add_done_callback(_callback)
|
||||
return {}
|
||||
|
||||
def run(self):
|
||||
counter = 0
|
||||
while True:
|
||||
time.sleep(1.0)
|
||||
replies = {}
|
||||
try:
|
||||
for node in self.nodes:
|
||||
node_id = node["NodeID"]
|
||||
stub = self.stubs[node_id]
|
||||
reply = stub.GetNodeStats(
|
||||
node_manager_pb2.GetNodeStatsRequest(
|
||||
include_memory_info=self.include_memory_info),
|
||||
timeout=2)
|
||||
reply_dict = MessageToDict(reply)
|
||||
reply_dict["nodeId"] = node_id
|
||||
replies[node["NodeManagerAddress"]] = reply_dict
|
||||
with self._raylet_stats_lock:
|
||||
for address, reply_dict in replies.items():
|
||||
self._raylet_stats[address] = reply_dict
|
||||
except Exception:
|
||||
logger.exception(traceback.format_exc())
|
||||
finally:
|
||||
counter += 1
|
||||
# From time to time, check if new nodes have joined the cluster
|
||||
# and update self.nodes
|
||||
if counter % 10:
|
||||
self._update_nodes()
|
||||
|
||||
|
||||
class TuneCollector(threading.Thread):
|
||||
"""Initialize collector worker thread.
|
||||
Args
|
||||
logdir (str): Directory path to save the status information of
|
||||
jobs and trials.
|
||||
reload_interval (float): Interval(in s) of space between loading
|
||||
data from logs
|
||||
"""
|
||||
|
||||
def __init__(self, reload_interval):
|
||||
self._logdir = None
|
||||
self._trial_records = {}
|
||||
self._data_lock = threading.Lock()
|
||||
self._reload_interval = reload_interval
|
||||
self._trials_available = False
|
||||
self._tensor_board_dir = ""
|
||||
self._enable_tensor_board = False
|
||||
self._errors = {}
|
||||
|
||||
super().__init__()
|
||||
|
||||
def get_stats(self):
|
||||
with self._data_lock:
|
||||
tensor_board_info = {
|
||||
"tensorboard_current": self._logdir == self._tensor_board_dir,
|
||||
"tensorboard_enabled": self._tensor_board_dir != ""
|
||||
}
|
||||
return {
|
||||
"trial_records": copy.deepcopy(self._trial_records),
|
||||
"errors": copy.deepcopy(self._errors),
|
||||
"tensorboard": tensor_board_info
|
||||
}
|
||||
|
||||
def set_experiment(self, experiment):
|
||||
with self._data_lock:
|
||||
if os.path.isdir(os.path.expanduser(experiment)):
|
||||
self._logdir = os.path.expanduser(experiment)
|
||||
return None, {"experiment": self._logdir}
|
||||
else:
|
||||
return "Not a Valid Directory", None
|
||||
|
||||
def enable_tensorboard(self):
|
||||
with self._data_lock:
|
||||
if not self._tensor_board_dir:
|
||||
tb = program.TensorBoard()
|
||||
tb.configure(argv=[None, "--logdir", str(self._logdir)])
|
||||
tb.launch()
|
||||
self._tensor_board_dir = self._logdir
|
||||
|
||||
def get_availability(self):
|
||||
with self._data_lock:
|
||||
return {
|
||||
"available": True,
|
||||
"trials_available": self._trials_available
|
||||
}
|
||||
|
||||
def run(self):
|
||||
while True:
|
||||
with self._data_lock:
|
||||
self.collect()
|
||||
time.sleep(self._reload_interval)
|
||||
|
||||
def collect_errors(self, df):
|
||||
sub_dirs = os.listdir(self._logdir)
|
||||
trial_names = filter(
|
||||
lambda d: os.path.isdir(os.path.join(self._logdir, d)), sub_dirs)
|
||||
for trial in trial_names:
|
||||
error_path = os.path.join(self._logdir, trial, "error.txt")
|
||||
if os.path.isfile(error_path):
|
||||
self._trials_available = True
|
||||
with open(error_path) as f:
|
||||
text = f.read()
|
||||
self._errors[str(trial)] = {
|
||||
"text": text,
|
||||
"job_id": os.path.basename(self._logdir),
|
||||
"trial_id": "No Trial ID"
|
||||
}
|
||||
other_data = df[df["logdir"].str.contains(trial)]
|
||||
if len(other_data) > 0:
|
||||
trial_id = other_data["trial_id"].values[0]
|
||||
self._errors[str(trial)]["trial_id"] = str(trial_id)
|
||||
if str(trial_id) in self._trial_records.keys():
|
||||
self._trial_records[str(trial_id)]["error"] = text
|
||||
self._trial_records[str(trial_id)][
|
||||
"status"] = "ERROR"
|
||||
|
||||
def collect(self):
|
||||
"""
|
||||
Collects and cleans data on the running Tune experiment from the
|
||||
Tune logs so that users can see this information in the front-end
|
||||
client
|
||||
"""
|
||||
self._trial_records = {}
|
||||
self._errors = {}
|
||||
if not self._logdir:
|
||||
return
|
||||
|
||||
# search through all the sub_directories in log directory
|
||||
analysis = Analysis(str(self._logdir))
|
||||
df = analysis.dataframe(metric=None, mode=None)
|
||||
|
||||
if len(df) == 0 or "trial_id" not in df.columns:
|
||||
return
|
||||
|
||||
self._trials_available = True
|
||||
|
||||
# make sure that data will convert to JSON without error
|
||||
df["trial_id_key"] = df["trial_id"].astype(str)
|
||||
df = df.fillna(0)
|
||||
|
||||
trial_ids = df["trial_id"]
|
||||
for i, value in df["trial_id"].iteritems():
|
||||
if type(value) != str and type(value) != int:
|
||||
trial_ids[i] = int(value)
|
||||
|
||||
df["trial_id"] = trial_ids
|
||||
|
||||
# convert df to python dict
|
||||
df = df.set_index("trial_id_key")
|
||||
trial_data = df.to_dict(orient="index")
|
||||
|
||||
# clean data and update class attribute
|
||||
if len(trial_data) > 0:
|
||||
trial_data = self.clean_trials(trial_data)
|
||||
self._trial_records.update(trial_data)
|
||||
|
||||
self.collect_errors(df)
|
||||
|
||||
def clean_trials(self, trial_details):
|
||||
first_trial = trial_details[list(trial_details.keys())[0]]
|
||||
config_keys = []
|
||||
float_keys = []
|
||||
metric_keys = []
|
||||
|
||||
# list of static attributes for trial
|
||||
default_names = [
|
||||
"logdir", "time_this_iter_s", "done", "episodes_total",
|
||||
"training_iteration", "timestamp", "timesteps_total",
|
||||
"experiment_id", "date", "timestamp", "time_total_s", "pid",
|
||||
"hostname", "node_ip", "time_since_restore",
|
||||
"timesteps_since_restore", "iterations_since_restore",
|
||||
"experiment_tag", "trial_id"
|
||||
]
|
||||
|
||||
# filter attributes into floats, metrics, and config variables
|
||||
for key, value in first_trial.items():
|
||||
if isinstance(value, float):
|
||||
float_keys.append(key)
|
||||
if str(key).startswith("config/"):
|
||||
config_keys.append(key)
|
||||
elif key not in default_names:
|
||||
metric_keys.append(key)
|
||||
|
||||
# clean data into a form that front-end client can handle
|
||||
for trial, details in trial_details.items():
|
||||
ts = os.path.getctime(details["logdir"])
|
||||
formatted_time = datetime.datetime.fromtimestamp(ts).strftime(
|
||||
"%Y-%m-%d %H:%M:%S")
|
||||
details["start_time"] = formatted_time
|
||||
details["params"] = {}
|
||||
details["metrics"] = {}
|
||||
|
||||
# round all floats
|
||||
for key in float_keys:
|
||||
details[key] = round(details[key], 12)
|
||||
|
||||
# group together config attributes
|
||||
for key in config_keys:
|
||||
new_name = key[7:]
|
||||
details["params"][new_name] = details[key]
|
||||
details.pop(key)
|
||||
|
||||
# group together metric attributes
|
||||
for key in metric_keys:
|
||||
details["metrics"][key] = details[key]
|
||||
details.pop(key)
|
||||
|
||||
if details["done"]:
|
||||
details["status"] = "TERMINATED"
|
||||
else:
|
||||
details["status"] = "RUNNING"
|
||||
details.pop("done")
|
||||
|
||||
details["job_id"] = os.path.basename(self._logdir)
|
||||
details["error"] = "No Error"
|
||||
|
||||
return trial_details
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser(
|
||||
description=("Parse Redis server for the "
|
||||
"dashboard to connect to."))
|
||||
parser.add_argument(
|
||||
"--host",
|
||||
required=True,
|
||||
type=str,
|
||||
help="The host to use for the HTTP server.")
|
||||
parser.add_argument(
|
||||
"--port",
|
||||
required=True,
|
||||
type=int,
|
||||
help="The port to use for the HTTP server.")
|
||||
parser.add_argument(
|
||||
"--redis-address",
|
||||
required=True,
|
||||
type=str,
|
||||
help="The address to use for Redis.")
|
||||
parser.add_argument(
|
||||
"--redis-password",
|
||||
required=False,
|
||||
type=str,
|
||||
default=None,
|
||||
help="the password to use for Redis")
|
||||
parser.add_argument(
|
||||
"--logging-level",
|
||||
required=False,
|
||||
type=str,
|
||||
default=ray_constants.LOGGER_LEVEL,
|
||||
choices=ray_constants.LOGGER_LEVEL_CHOICES,
|
||||
help=ray_constants.LOGGER_LEVEL_HELP)
|
||||
parser.add_argument(
|
||||
"--logging-format",
|
||||
required=False,
|
||||
type=str,
|
||||
default=ray_constants.LOGGER_FORMAT,
|
||||
help=ray_constants.LOGGER_FORMAT_HELP)
|
||||
parser.add_argument(
|
||||
"--temp-dir",
|
||||
required=False,
|
||||
type=str,
|
||||
default=None,
|
||||
help="Specify the path of the temporary directory use by Ray process.")
|
||||
args = parser.parse_args()
|
||||
ray.ray_logging.setup_logger(args.logging_level, args.logging_format)
|
||||
|
||||
# TODO(sang): Add a URL validation.
|
||||
metrics_export_address = os.environ.get("METRICS_EXPORT_ADDRESS")
|
||||
|
||||
try:
|
||||
dashboard = Dashboard(
|
||||
args.host,
|
||||
args.port,
|
||||
args.redis_address,
|
||||
args.temp_dir,
|
||||
redis_password=args.redis_password,
|
||||
metrics_export_address=metrics_export_address)
|
||||
dashboard.run()
|
||||
except Exception as e:
|
||||
# Something went wrong, so push an error to all drivers.
|
||||
redis_client = ray._private.services.create_redis_client(
|
||||
args.redis_address, password=args.redis_password)
|
||||
traceback_str = ray.utils.format_error_message(traceback.format_exc())
|
||||
message = ("The dashboard on node {} failed with the following "
|
||||
"error:\n{}".format(platform.node(), traceback_str))
|
||||
ray.utils.push_error_to_driver_through_redis(
|
||||
redis_client, ray_constants.DASHBOARD_DIED_ERROR, message)
|
||||
if isinstance(e, OSError) and e.errno == errno.ENOENT:
|
||||
logger.warning(message)
|
||||
else:
|
||||
raise e
|
||||
@@ -1,120 +0,0 @@
|
||||
import aiohttp
|
||||
|
||||
from abc import ABC, abstractmethod
|
||||
|
||||
|
||||
class BaseDashboardController(ABC):
|
||||
"""Set of APIs to interact with a Dashboard class and routes.
|
||||
|
||||
Make sure you run start_collecting_metrics function before using
|
||||
get_[stats]_info methods.
|
||||
"""
|
||||
|
||||
@abstractmethod
|
||||
def get_ray_config(self):
|
||||
raise NotImplementedError("Please implement this method.")
|
||||
|
||||
@abstractmethod
|
||||
def get_node_info(self):
|
||||
raise NotImplementedError("Please implement this method.")
|
||||
|
||||
@abstractmethod
|
||||
def get_raylet_info(self):
|
||||
raise NotImplementedError("Please implement this method.")
|
||||
|
||||
@abstractmethod
|
||||
def tune_info(self):
|
||||
raise NotImplementedError("Please implement this method.")
|
||||
|
||||
@abstractmethod
|
||||
def tune_availability(self):
|
||||
raise NotImplementedError("Please implement this method.")
|
||||
|
||||
@abstractmethod
|
||||
def launch_profiling(self, node_id, pid, duration):
|
||||
raise NotImplementedError("Please implement this method.")
|
||||
|
||||
@abstractmethod
|
||||
def check_profiling_status(self, profiling_id):
|
||||
raise NotImplementedError("Please implement this method.")
|
||||
|
||||
@abstractmethod
|
||||
def get_profiling_info(self, profiling_id):
|
||||
raise NotImplementedError("Please implement this method.")
|
||||
|
||||
@abstractmethod
|
||||
def kill_actor(self, actor_id, ip_address, port):
|
||||
raise NotImplementedError("Please implement this method.")
|
||||
|
||||
@abstractmethod
|
||||
def get_logs(self, hostname, pid):
|
||||
raise NotImplementedError("Please implement this method.")
|
||||
|
||||
@abstractmethod
|
||||
def get_errors(self, hostname, pid):
|
||||
raise NotImplementedError("Please implement this method.")
|
||||
|
||||
@abstractmethod
|
||||
def start_collecting_metrics(self):
|
||||
"""Start threads/processes/actors to collect metrics
|
||||
|
||||
NOTE: This interface should be called only once before using
|
||||
other api calls.
|
||||
"""
|
||||
raise NotImplementedError("Please implement this method.")
|
||||
|
||||
|
||||
class BaseDashboardRouteHandler(ABC):
|
||||
"""Collection of routes that should be implemented for dashboard."""
|
||||
|
||||
@abstractmethod
|
||||
def get_forbidden(self, _) -> aiohttp.web.Response:
|
||||
raise NotImplementedError("Please implement this method.")
|
||||
|
||||
@abstractmethod
|
||||
async def get_index(self, req) -> aiohttp.web.Response:
|
||||
raise NotImplementedError("Please implement this method.")
|
||||
|
||||
@abstractmethod
|
||||
async def ray_config(self, req) -> aiohttp.web.Response:
|
||||
raise NotImplementedError("Please implement this method.")
|
||||
|
||||
@abstractmethod
|
||||
async def node_info(self, req) -> aiohttp.web.Response:
|
||||
raise NotImplementedError("Please implement this method.")
|
||||
|
||||
@abstractmethod
|
||||
async def raylet_info(self, req) -> aiohttp.web.Response:
|
||||
raise NotImplementedError("Please implement this method.")
|
||||
|
||||
@abstractmethod
|
||||
async def tune_info(self, req) -> aiohttp.web.Response:
|
||||
raise NotImplementedError("Please implement this method.")
|
||||
|
||||
@abstractmethod
|
||||
async def tune_availability(self, req) -> aiohttp.web.Response:
|
||||
raise NotImplementedError("Please implement this method.")
|
||||
|
||||
@abstractmethod
|
||||
async def launch_profiling(self, req) -> aiohttp.web.Response:
|
||||
raise NotImplementedError("Please implement this method.")
|
||||
|
||||
@abstractmethod
|
||||
async def check_profiling_status(self, req) -> aiohttp.web.Response:
|
||||
raise NotImplementedError("Please implement this method.")
|
||||
|
||||
@abstractmethod
|
||||
async def get_profiling_info(self, req) -> aiohttp.web.Response:
|
||||
raise NotImplementedError("Please implement this method.")
|
||||
|
||||
@abstractmethod
|
||||
async def kill_actor(self, req) -> aiohttp.web.Response:
|
||||
raise NotImplementedError("Please implement this method.")
|
||||
|
||||
@abstractmethod
|
||||
async def logs(self, req) -> aiohttp.web.Response:
|
||||
raise NotImplementedError("Please implement this method.")
|
||||
|
||||
@abstractmethod
|
||||
async def errors(self, req) -> aiohttp.web.Response:
|
||||
raise NotImplementedError("Please implement this method.")
|
||||
@@ -1,300 +0,0 @@
|
||||
import base64
|
||||
|
||||
from collections import defaultdict
|
||||
from enum import Enum
|
||||
from typing import List
|
||||
|
||||
import ray
|
||||
|
||||
from ray._raylet import (TaskID, ActorID, JobID)
|
||||
|
||||
# These values are used to calculate if objectRefs are actor handles.
|
||||
TASKID_BYTES_SIZE = TaskID.size()
|
||||
ACTORID_BYTES_SIZE = ActorID.size()
|
||||
JOBID_BYTES_SIZE = JobID.size()
|
||||
# We need to multiply 2 because we need bits size instead of bytes size.
|
||||
TASKID_RANDOM_BITS_SIZE = (TASKID_BYTES_SIZE - ACTORID_BYTES_SIZE) * 2
|
||||
ACTORID_RANDOM_BITS_SIZE = (ACTORID_BYTES_SIZE - JOBID_BYTES_SIZE) * 2
|
||||
|
||||
|
||||
def decode_object_ref_if_needed(object_ref: str) -> bytes:
|
||||
"""Decode objectRef bytes string.
|
||||
|
||||
gRPC reply contains an objectRef that is encodded by Base64.
|
||||
This function is used to decode the objectRef.
|
||||
Note that there are times that objectRef is already decoded as
|
||||
a hex string. In this case, just convert it to a binary number.
|
||||
"""
|
||||
if object_ref.endswith("="):
|
||||
# If the object ref ends with =, that means it is base64 encoded.
|
||||
# Object refs will always have = as a padding
|
||||
# when it is base64 encoded because objectRef is always 20B.
|
||||
return base64.standard_b64decode(object_ref)
|
||||
else:
|
||||
return ray.utils.hex_to_binary(object_ref)
|
||||
|
||||
|
||||
class SortingType(Enum):
|
||||
PID = 1
|
||||
OBJECT_SIZE = 3
|
||||
REFERENCE_TYPE = 4
|
||||
|
||||
|
||||
class GroupByType(Enum):
|
||||
NODE_ADDRESS = "node"
|
||||
STACK_TRACE = "stack_trace"
|
||||
|
||||
|
||||
class ReferenceType:
|
||||
# We don't use enum because enum is not json serializable.
|
||||
ACTOR_HANDLE = "ACTOR_HANDLE"
|
||||
PINNED_IN_MEMORY = "PINNED_IN_MEMORY"
|
||||
LOCAL_REFERENCE = "LOCAL_REFERENCE"
|
||||
USED_BY_PENDING_TASK = "USED_BY_PENDING_TASK"
|
||||
CAPTURED_IN_OBJECT = "CAPTURED_IN_OBJECT"
|
||||
UNKNOWN_STATUS = "UNKNOWN_STATUS"
|
||||
|
||||
|
||||
class MemoryTableEntry:
|
||||
def __init__(self, *, object_ref: dict, node_address: str, is_driver: bool,
|
||||
pid: int):
|
||||
# worker info
|
||||
self.is_driver = is_driver
|
||||
self.pid = pid
|
||||
self.node_address = node_address
|
||||
|
||||
# object info
|
||||
self.object_size = int(object_ref.get("objectSize", -1))
|
||||
self.call_site = object_ref.get("callSite", "<Unknown>")
|
||||
self.object_ref = ray.ObjectRef(
|
||||
decode_object_ref_if_needed(object_ref["objectId"]))
|
||||
|
||||
# reference info
|
||||
self.local_ref_count = int(object_ref.get("localRefCount", 0))
|
||||
self.pinned_in_memory = bool(object_ref.get("pinnedInMemory", False))
|
||||
self.submitted_task_ref_count = int(
|
||||
object_ref.get("submittedTaskRefCount", 0))
|
||||
self.contained_in_owned = [
|
||||
ray.ObjectRef(decode_object_ref_if_needed(object_ref))
|
||||
for object_ref in object_ref.get("containedInOwned", [])
|
||||
]
|
||||
self.reference_type = self._get_reference_type()
|
||||
|
||||
def is_valid(self) -> bool:
|
||||
# If the entry doesn't have a reference type or some invalid state,
|
||||
# (e.g., no object ref presented), it is considered invalid.
|
||||
if (not self.pinned_in_memory and self.local_ref_count == 0
|
||||
and self.submitted_task_ref_count == 0
|
||||
and len(self.contained_in_owned) == 0):
|
||||
return False
|
||||
elif self.object_ref.is_nil():
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
|
||||
def group_key(self, group_by_type: GroupByType) -> str:
|
||||
if group_by_type == GroupByType.NODE_ADDRESS:
|
||||
return self.node_address
|
||||
elif group_by_type == GroupByType.STACK_TRACE:
|
||||
return self.call_site
|
||||
else:
|
||||
raise ValueError(
|
||||
"group by type {} is invalid.".format(group_by_type))
|
||||
|
||||
def _get_reference_type(self) -> str:
|
||||
if self._is_object_ref_actor_handle():
|
||||
return ReferenceType.ACTOR_HANDLE
|
||||
if self.pinned_in_memory:
|
||||
return ReferenceType.PINNED_IN_MEMORY
|
||||
elif self.submitted_task_ref_count > 0:
|
||||
return ReferenceType.USED_BY_PENDING_TASK
|
||||
elif self.local_ref_count > 0:
|
||||
return ReferenceType.LOCAL_REFERENCE
|
||||
elif len(self.contained_in_owned) > 0:
|
||||
return ReferenceType.CAPTURED_IN_OBJECT
|
||||
else:
|
||||
return ReferenceType.UNKNOWN_STATUS
|
||||
|
||||
def _is_object_ref_actor_handle(self) -> bool:
|
||||
object_ref_hex = self.object_ref.hex()
|
||||
|
||||
# random (8B) | ActorID(6B) | flag (2B) | index (6B)
|
||||
# ActorID(6B) == ActorRandomByte(4B) + JobID(2B)
|
||||
# If random bytes are all 'f', but ActorRandomBytes
|
||||
# are not all 'f', that means it is an actor creation
|
||||
# task, which is an actor handle.
|
||||
random_bits = object_ref_hex[:TASKID_RANDOM_BITS_SIZE]
|
||||
actor_random_bits = object_ref_hex[TASKID_RANDOM_BITS_SIZE:
|
||||
TASKID_RANDOM_BITS_SIZE +
|
||||
ACTORID_RANDOM_BITS_SIZE]
|
||||
if (random_bits == "f" * 16 and not actor_random_bits == "f" * 8):
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
def __dict__(self):
|
||||
return {
|
||||
"object_ref": self.object_ref.hex(),
|
||||
"pid": self.pid,
|
||||
"node_ip_address": self.node_address,
|
||||
"object_size": self.object_size,
|
||||
"reference_type": self.reference_type,
|
||||
"call_site": self.call_site,
|
||||
"local_ref_count": self.local_ref_count,
|
||||
"pinned_in_memory": self.pinned_in_memory,
|
||||
"submitted_task_ref_count": self.submitted_task_ref_count,
|
||||
"contained_in_owned": [
|
||||
object_ref.hex() for object_ref in self.contained_in_owned
|
||||
],
|
||||
"type": "Driver" if self.is_driver else "Worker"
|
||||
}
|
||||
|
||||
def __str__(self):
|
||||
return self.__repr__()
|
||||
|
||||
def __repr__(self):
|
||||
return str(self.__dict__())
|
||||
|
||||
|
||||
class MemoryTable:
|
||||
def __init__(self,
|
||||
entries: List[MemoryTableEntry],
|
||||
group_by_type: GroupByType = GroupByType.NODE_ADDRESS,
|
||||
sort_by_type: SortingType = SortingType.PID):
|
||||
self.table = entries
|
||||
# Group is a list of memory tables grouped by a group key.
|
||||
self.group = {}
|
||||
self.summary = defaultdict(int)
|
||||
if group_by_type and sort_by_type:
|
||||
self.setup(group_by_type, sort_by_type)
|
||||
elif group_by_type:
|
||||
self._group_by(group_by_type)
|
||||
elif sort_by_type:
|
||||
self._sort_by(sort_by_type)
|
||||
|
||||
def setup(self, group_by_type: GroupByType, sort_by_type: SortingType):
|
||||
"""Setup memory table.
|
||||
|
||||
This will sort entries first and gruop them after.
|
||||
Sort order will be still kept.
|
||||
"""
|
||||
self._sort_by(sort_by_type)._group_by(group_by_type)
|
||||
for group_memory_table in self.group.values():
|
||||
group_memory_table.summarize()
|
||||
self.summarize()
|
||||
return self
|
||||
|
||||
def insert_entry(self, entry: MemoryTableEntry):
|
||||
self.table.append(entry)
|
||||
|
||||
def summarize(self):
|
||||
# Reset summary.
|
||||
total_object_size = 0
|
||||
total_local_ref_count = 0
|
||||
total_pinned_in_memory = 0
|
||||
total_used_by_pending_task = 0
|
||||
total_captured_in_objects = 0
|
||||
total_actor_handles = 0
|
||||
|
||||
for entry in self.table:
|
||||
if entry.object_size > 0:
|
||||
total_object_size += entry.object_size
|
||||
if entry.reference_type == ReferenceType.LOCAL_REFERENCE:
|
||||
total_local_ref_count += 1
|
||||
elif entry.reference_type == ReferenceType.PINNED_IN_MEMORY:
|
||||
total_pinned_in_memory += 1
|
||||
elif entry.reference_type == ReferenceType.USED_BY_PENDING_TASK:
|
||||
total_used_by_pending_task += 1
|
||||
elif entry.reference_type == ReferenceType.CAPTURED_IN_OBJECT:
|
||||
total_captured_in_objects += 1
|
||||
elif entry.reference_type == ReferenceType.ACTOR_HANDLE:
|
||||
total_actor_handles += 1
|
||||
|
||||
self.summary = {
|
||||
"total_object_size": total_object_size,
|
||||
"total_local_ref_count": total_local_ref_count,
|
||||
"total_pinned_in_memory": total_pinned_in_memory,
|
||||
"total_used_by_pending_task": total_used_by_pending_task,
|
||||
"total_captured_in_objects": total_captured_in_objects,
|
||||
"total_actor_handles": total_actor_handles
|
||||
}
|
||||
return self
|
||||
|
||||
def _sort_by(self, sorting_type: SortingType):
|
||||
if sorting_type == SortingType.PID:
|
||||
self.table.sort(key=lambda entry: entry.pid)
|
||||
elif sorting_type == SortingType.OBJECT_SIZE:
|
||||
self.table.sort(key=lambda entry: entry.object_size)
|
||||
elif sorting_type == SortingType.REFERENCE_TYPE:
|
||||
self.table.sort(key=lambda entry: entry.reference_type)
|
||||
else:
|
||||
raise ValueError(
|
||||
"Give sorting type: {} is invalid.".format(sorting_type))
|
||||
return self
|
||||
|
||||
def _group_by(self, group_by_type: GroupByType):
|
||||
"""Group entries and summarize the result.
|
||||
|
||||
NOTE: Each group is another MemoryTable.
|
||||
"""
|
||||
# Reset group
|
||||
self.group = {}
|
||||
|
||||
# Build entries per group.
|
||||
group = defaultdict(list)
|
||||
for entry in self.table:
|
||||
group[entry.group_key(group_by_type)].append(entry)
|
||||
|
||||
# Build a group table.
|
||||
for group_key, entries in group.items():
|
||||
self.group[group_key] = MemoryTable(
|
||||
entries, group_by_type=None, sort_by_type=None)
|
||||
for group_key, group_memory_table in self.group.items():
|
||||
group_memory_table.summarize()
|
||||
return self
|
||||
|
||||
def __dict__(self):
|
||||
return {
|
||||
"summary": self.summary,
|
||||
"group": {
|
||||
group_key: {
|
||||
"entries": group_memory_table.get_entries(),
|
||||
"summary": group_memory_table.summary
|
||||
}
|
||||
for group_key, group_memory_table in self.group.items()
|
||||
}
|
||||
}
|
||||
|
||||
def get_entries(self) -> List[dict]:
|
||||
return [entry.__dict__() for entry in self.table]
|
||||
|
||||
def __repr__(self):
|
||||
return str(self.__dict__())
|
||||
|
||||
def __str__(self):
|
||||
return self.__repr__()
|
||||
|
||||
|
||||
def construct_memory_table(workers_info_by_node: dict,
|
||||
group_by: GroupByType = GroupByType.NODE_ADDRESS,
|
||||
sort_by=SortingType.OBJECT_SIZE) -> MemoryTable:
|
||||
memory_table_entries = []
|
||||
for node_id, worker_infos in workers_info_by_node.items():
|
||||
for worker_info in worker_infos:
|
||||
pid = worker_info["pid"]
|
||||
is_driver = worker_info.get("isDriver", False)
|
||||
core_worker_stats = worker_info["coreWorkerStats"]
|
||||
node_address = core_worker_stats["ipAddress"]
|
||||
object_refs = core_worker_stats.get("objectRefs", [])
|
||||
|
||||
for object_ref in object_refs:
|
||||
memory_table_entry = MemoryTableEntry(
|
||||
object_ref=object_ref,
|
||||
node_address=node_address,
|
||||
is_driver=is_driver,
|
||||
pid=pid)
|
||||
if memory_table_entry.is_valid():
|
||||
memory_table_entries.append(memory_table_entry)
|
||||
memory_table = MemoryTable(
|
||||
memory_table_entries, group_by_type=group_by, sort_by_type=sort_by)
|
||||
return memory_table
|
||||
@@ -1,30 +0,0 @@
|
||||
import logging
|
||||
import typing
|
||||
|
||||
from ray.dashboard.metrics_exporter.schema import ActionType, KillAction
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class ActionHandler:
|
||||
def __init__(self, dashboard_controller):
|
||||
self.dashboard_controller = dashboard_controller
|
||||
|
||||
def handle_kill_action(self, action: dict):
|
||||
kill_action = KillAction.parse_obj(action)
|
||||
self.dashboard_controller.kill_actor(
|
||||
kill_action.actor_id, kill_action.ip_address, kill_action.port)
|
||||
|
||||
def handle_actions(self, actions: typing.List[dict]):
|
||||
for action in actions:
|
||||
action_type = action.get("type", None)
|
||||
|
||||
if action_type == ActionType.KILL_ACTOR:
|
||||
self.handle_kill_action(action)
|
||||
else:
|
||||
logger.warning("Action type {} has been received, but "
|
||||
"action handler doesn't know how to handle "
|
||||
"them. It will skip processing the request. "
|
||||
"Plesae raise an issue if you see this problem."
|
||||
.format(action_type))
|
||||
continue
|
||||
@@ -1,38 +0,0 @@
|
||||
import json
|
||||
|
||||
try:
|
||||
import requests # `requests` is not part of stdlib.
|
||||
except ImportError:
|
||||
requests = None
|
||||
print("Couldn't import `requests` library. "
|
||||
"Be sure to install it on the client side.")
|
||||
|
||||
from ray.dashboard.metrics_exporter.schema import AuthRequest, AuthResponse
|
||||
from ray.dashboard.metrics_exporter.schema import IngestRequest, IngestResponse
|
||||
|
||||
|
||||
def authentication_request(url, cluster_id) -> AuthResponse:
|
||||
auth_requeset = AuthRequest(cluster_id=cluster_id)
|
||||
response = requests.post(url, data=auth_requeset.json())
|
||||
response.raise_for_status()
|
||||
return AuthResponse.parse_obj(json.loads(response.json()))
|
||||
|
||||
|
||||
def ingest_request(url, access_token, ray_config, node_info, raylet_info,
|
||||
tune_info, tune_availability) -> IngestResponse:
|
||||
ingest_request = IngestRequest(
|
||||
ray_config=ray_config,
|
||||
node_info=node_info,
|
||||
raylet_info=raylet_info,
|
||||
tune_info=tune_info,
|
||||
tune_availability=tune_availability)
|
||||
response = requests.post(
|
||||
url,
|
||||
headers={
|
||||
"Content-Type": "application/json",
|
||||
"Authorization": "Bearer {access_token}".format(
|
||||
access_token=access_token)
|
||||
},
|
||||
data=ingest_request.json())
|
||||
response.raise_for_status()
|
||||
return IngestResponse.parse_obj(json.loads(response.json()))
|
||||
@@ -1,148 +0,0 @@
|
||||
import logging
|
||||
import threading
|
||||
import traceback
|
||||
import time
|
||||
|
||||
from ray.dashboard.metrics_exporter import api
|
||||
from ray.dashboard.metrics_exporter.actions import ActionHandler
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class MetricsExportClient:
|
||||
"""Group of functionalities used by Dashboard to do external communication.
|
||||
|
||||
start_export_metrics should not be called more than once as it can create
|
||||
multiple threads that export the same metrics.
|
||||
|
||||
Args:
|
||||
address(str): Address to export metrics.
|
||||
This should include a web protocol.
|
||||
dashboard_controller(BaseDashboardController): Dashboard controller to
|
||||
run dashboard business logic.
|
||||
dashboard_id(str): Unique dashboard ID.
|
||||
exporter(Exporter): Thread to export metrics.
|
||||
"""
|
||||
|
||||
def __init__(self, address, dashboard_controller, dashboard_id, exporter):
|
||||
self.dashboard_id = dashboard_id
|
||||
self.address = address
|
||||
self.auth_url = "{}/auth".format(address)
|
||||
self.dashboard_controller = dashboard_controller
|
||||
self.exporter = exporter
|
||||
|
||||
# Data obtained from requests.
|
||||
self._dashboard_url = None
|
||||
self.auth_info = None
|
||||
|
||||
# Client states
|
||||
self.is_authenticated = False
|
||||
self.is_exporting_started = False
|
||||
|
||||
def _authenticate(self):
|
||||
"""
|
||||
Return:
|
||||
Whether or not the authentication succeed.
|
||||
"""
|
||||
self.auth_info = api.authentication_request(self.auth_url,
|
||||
self.dashboard_id)
|
||||
self._dashboard_url = "{address}/dashboard/{access_token}".format(
|
||||
address=self.address,
|
||||
access_token=self.auth_info.access_token_dashboard)
|
||||
self.is_authenticated = True
|
||||
|
||||
@property
|
||||
def enabled(self):
|
||||
return self.is_authenticated
|
||||
|
||||
@property
|
||||
def dashboard_url(self):
|
||||
# This function should be used only after authentication succeed.
|
||||
assert self._dashboard_url is not None, (
|
||||
"dashboard url should be obtained by "
|
||||
"`start_exporting_metrics` method first.")
|
||||
return self._dashboard_url
|
||||
|
||||
def start_exporting_metrics(self):
|
||||
"""Create a thread to export metrics.
|
||||
|
||||
Once this function succeeds, it should not be called again.
|
||||
|
||||
Return:
|
||||
Whether or not it suceedes to run exporter.
|
||||
"""
|
||||
assert not self.is_exporting_started
|
||||
if not self.is_authenticated:
|
||||
try:
|
||||
self._authenticate()
|
||||
except Exception as e:
|
||||
error = ("Authentication failed with an error: {}\n"
|
||||
"Traceback: {}".format(e, traceback.format_exc()))
|
||||
logger.error(error)
|
||||
return False, error
|
||||
|
||||
self.exporter.access_token = self.auth_info.access_token_ingest
|
||||
self.exporter.start()
|
||||
self.is_exporting_started = True
|
||||
return True, None
|
||||
|
||||
|
||||
class Exporter(threading.Thread):
|
||||
"""Python thread that exports metrics periodically.
|
||||
|
||||
Args:
|
||||
dashboard_id(str): Unique Dashboard ID.
|
||||
address(str): Address to export metrics.
|
||||
dashboard_controller(BaseDashboardController): dashboard
|
||||
controller for dashboard business logic.
|
||||
update_frequency(float): Frequency to export metrics.
|
||||
"""
|
||||
|
||||
def __init__(self,
|
||||
dashboard_id,
|
||||
address,
|
||||
dashboard_controller,
|
||||
update_frequency=1.0):
|
||||
assert update_frequency >= 1.0
|
||||
|
||||
self.dashboard_id = dashboard_id
|
||||
self.dashboard_controller = dashboard_controller
|
||||
self.action_handler = ActionHandler(dashboard_controller)
|
||||
self.export_address = "{}/ingest".format(address)
|
||||
self.update_frequency = update_frequency
|
||||
self._access_token = None
|
||||
|
||||
super().__init__()
|
||||
|
||||
@property
|
||||
def access_token(self):
|
||||
return self._access_token
|
||||
|
||||
@access_token.setter
|
||||
def access_token(self, access_token):
|
||||
self._access_token = access_token
|
||||
|
||||
def export(self, ray_config, node_info, raylet_info, tune_info,
|
||||
tune_availability):
|
||||
ingest_response = api.ingest_request(
|
||||
self.export_address, self.access_token, ray_config, node_info,
|
||||
raylet_info, tune_info, tune_availability)
|
||||
actions = ingest_response.actions
|
||||
self.action_handler.handle_actions(actions)
|
||||
|
||||
def run(self):
|
||||
assert self.access_token is not None, (
|
||||
"Set access token before running an exporter thread.")
|
||||
while True:
|
||||
try:
|
||||
time.sleep(self.update_frequency)
|
||||
self.export(self.dashboard_controller.get_ray_config(),
|
||||
self.dashboard_controller.get_node_info(),
|
||||
self.dashboard_controller.get_raylet_info(),
|
||||
self.dashboard_controller.tune_info(),
|
||||
self.dashboard_controller.tune_availability())
|
||||
except Exception as e:
|
||||
logger.error(
|
||||
"Exception occurred while exporting metrics: {}.\n"
|
||||
"Traceback: {}".format(e, traceback.format_exc()))
|
||||
continue
|
||||
@@ -1,118 +0,0 @@
|
||||
import json
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
|
||||
class ValidationError(Exception):
|
||||
pass
|
||||
|
||||
|
||||
Field = namedtuple("Field", ["required", "default", "type"])
|
||||
|
||||
|
||||
class BaseModel:
|
||||
"""Base class to define schema.
|
||||
|
||||
Model schema should be defined in class variable `__schema__`
|
||||
within a child class. `__schema__` should be a dictionary that contains
|
||||
`field`: `Field(
|
||||
required=required: bool,
|
||||
default=default: Any,
|
||||
type=type: type
|
||||
)`
|
||||
See the example below for more details.
|
||||
|
||||
The class can have unexpected behavior if you don't follow the
|
||||
schema pattern properly.
|
||||
|
||||
Example:
|
||||
class A(BaseModel):
|
||||
__schema__ = {
|
||||
"field_name": Field(
|
||||
required=[True|False],
|
||||
default=[default],
|
||||
type=[type]
|
||||
),
|
||||
"cluster_id": Field(
|
||||
required=True,
|
||||
default="1234",
|
||||
type=str
|
||||
),
|
||||
}
|
||||
|
||||
Raises:
|
||||
ValidationError: Raised if a given arg doesn't satisfy the schema.
|
||||
"""
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
self._dict = kwargs
|
||||
for key, value in kwargs.items():
|
||||
setattr(self, key, value)
|
||||
|
||||
def __str__(self):
|
||||
name = "{}\n".format(self.__class__.__name__)
|
||||
return name + str(self._dict)
|
||||
|
||||
def json(self):
|
||||
return json.dumps(self._dict)
|
||||
|
||||
@classmethod
|
||||
def parse_obj(cls, obj):
|
||||
# Validation.
|
||||
assert type(obj) == dict, ("It can only parse dict type object, "
|
||||
"but {} type is given.".format(type(obj)))
|
||||
for field, schema in cls.__schema__.items():
|
||||
required, default, arg_type = schema
|
||||
if field not in obj:
|
||||
if required:
|
||||
raise ValidationError("{} is required, but doesn't "
|
||||
"exist in a given object {}".format(
|
||||
field, obj))
|
||||
else:
|
||||
# Set default value if the field is optional
|
||||
obj[field] = default
|
||||
|
||||
return cls(**obj)
|
||||
|
||||
|
||||
class IngestRequest(BaseModel):
|
||||
__schema__ = {
|
||||
"ray_config": Field(required=True, default=None, type=tuple),
|
||||
"node_info": Field(required=True, default=None, type=dict),
|
||||
"raylet_info": Field(required=True, default=None, type=dict),
|
||||
"tune_info": Field(required=True, default=None, type=dict),
|
||||
"tune_availability": Field(required=True, default=None, type=dict)
|
||||
}
|
||||
|
||||
|
||||
class IngestResponse(BaseModel):
|
||||
__schema__ = {
|
||||
"succeed": Field(required=True, default=None, type=bool),
|
||||
"actions": Field(required=False, default=[], type=list)
|
||||
}
|
||||
|
||||
|
||||
class AuthRequest(BaseModel):
|
||||
__schema__ = {"cluster_id": Field(required=True, default=None, type=str)}
|
||||
|
||||
|
||||
class AuthResponse(BaseModel):
|
||||
__schema__ = {
|
||||
"access_token_dashboard": Field(required=True, default=None, type=str),
|
||||
"access_token_ingest": Field(required=True, default=None, type=str)
|
||||
}
|
||||
|
||||
|
||||
# Enum is not used because action types will be received
|
||||
# through a network communication, and it will be string.
|
||||
class ActionType:
|
||||
KILL_ACTOR = "KILL_ACTOR"
|
||||
|
||||
|
||||
class KillAction(BaseModel):
|
||||
__schema__ = {
|
||||
"type": Field(required=False, default=ActionType.KILL_ACTOR, type=str),
|
||||
"actor_id": Field(required=True, default=None, type=str),
|
||||
"ip_address": Field(required=True, default=None, type=str),
|
||||
"port": Field(required=True, default=None, type=int)
|
||||
}
|
||||
@@ -1,321 +0,0 @@
|
||||
from collections import defaultdict
|
||||
from ray.dashboard.util import to_unix_time, format_reply_id
|
||||
from base64 import b64decode
|
||||
import ray
|
||||
import threading
|
||||
import json
|
||||
import traceback
|
||||
import copy
|
||||
import logging
|
||||
from datetime import datetime
|
||||
import time
|
||||
from typing import Dict
|
||||
import re
|
||||
|
||||
from operator import itemgetter
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
PYCLASSNAME_RE = re.compile(r"(.+?)\(")
|
||||
|
||||
|
||||
def _group_actors_by_python_class(actors):
|
||||
groups = defaultdict(list)
|
||||
for actor in actors.values():
|
||||
actor_title = actor.get("actorTitle")
|
||||
if not actor_title:
|
||||
groups["Unknown Class"].append(actor)
|
||||
else:
|
||||
match = PYCLASSNAME_RE.search(actor_title)
|
||||
if match:
|
||||
# Catches case of actorTitle like
|
||||
# Foo(bar, baz, [1,2,3]) -> Foo
|
||||
class_name = match.groups()[0]
|
||||
groups[class_name].append(actor)
|
||||
else:
|
||||
# Catches case of e.g. just Foo
|
||||
# in case of actor task
|
||||
groups[actor_title].append(actor)
|
||||
return groups
|
||||
|
||||
|
||||
def _get_actor_group_stats(group):
|
||||
state_to_count = defaultdict(lambda: 0)
|
||||
executed_tasks = 0
|
||||
min_timestamp = None
|
||||
num_timestamps = 0
|
||||
sum_timestamps = 0
|
||||
now = time.time() * 1000 # convert S -> MS
|
||||
for actor in group:
|
||||
state_to_count[actor["state"]] += 1
|
||||
if "timestamp" in actor:
|
||||
if not min_timestamp or actor["timestamp"] < min_timestamp:
|
||||
min_timestamp = actor["timestamp"]
|
||||
num_timestamps += 1
|
||||
sum_timestamps += now - actor["timestamp"]
|
||||
if "numExecutedTasks" in actor:
|
||||
executed_tasks += actor["numExecutedTasks"]
|
||||
if num_timestamps > 0:
|
||||
avg_lifetime = int((sum_timestamps / num_timestamps) / 1000)
|
||||
max_lifetime = int((now - min_timestamp) / 1000)
|
||||
else:
|
||||
avg_lifetime = 0
|
||||
max_lifetime = 0
|
||||
return {
|
||||
"stateToCount": state_to_count,
|
||||
"avgLifetime": avg_lifetime,
|
||||
"maxLifetime": max_lifetime,
|
||||
"numExecutedTasks": executed_tasks,
|
||||
}
|
||||
|
||||
|
||||
class NodeStats(threading.Thread):
|
||||
def __init__(self, redis_address, redis_password=None):
|
||||
self.redis_key = "{}.*".format(ray.gcs_utils.REPORTER_CHANNEL)
|
||||
self.redis_client = ray._private.services.create_redis_client(
|
||||
redis_address, password=redis_password)
|
||||
|
||||
self._node_stats = {}
|
||||
self._ip_to_hostname = {}
|
||||
self._addr_to_owner_addr = {}
|
||||
self._addr_to_actor_id = {}
|
||||
self._addr_to_extra_info_dict = {}
|
||||
self._node_stats_lock = threading.Lock()
|
||||
|
||||
self._default_info = {
|
||||
"actorId": "",
|
||||
"children": {},
|
||||
"currentTaskFuncDesc": [],
|
||||
"ipAddress": "",
|
||||
"jobId": "",
|
||||
"numExecutedTasks": 0,
|
||||
"numLocalObjects": 0,
|
||||
"numObjectRefsInScope": 0,
|
||||
"port": 0,
|
||||
"state": 0,
|
||||
"taskQueueLength": 0,
|
||||
"usedObjectStoreMemory": 0,
|
||||
"usedResources": {},
|
||||
}
|
||||
|
||||
# Mapping from IP address to PID to list of log lines
|
||||
self._logs = defaultdict(lambda: defaultdict(list))
|
||||
|
||||
# Mapping from IP address to PID to list of error messages
|
||||
self._errors = defaultdict(lambda: defaultdict(list))
|
||||
|
||||
ray.state.state._initialize_global_state(
|
||||
redis_address=redis_address, redis_password=redis_password)
|
||||
|
||||
super().__init__()
|
||||
|
||||
def _insert_log_counts(self):
|
||||
for ip, logs_by_pid in self._logs.items():
|
||||
hostname = self._ip_to_hostname.get(ip)
|
||||
if not hostname or hostname not in self._node_stats:
|
||||
continue
|
||||
logs_by_pid = {pid: len(logs) for pid, logs in logs_by_pid.items()}
|
||||
self._node_stats[hostname]["log_count"] = logs_by_pid
|
||||
|
||||
def _insert_error_counts(self):
|
||||
for ip, errs_by_pid in self._errors.items():
|
||||
hostname = self._ip_to_hostname.get(ip)
|
||||
if not hostname or hostname not in self._node_stats:
|
||||
continue
|
||||
errs_by_pid = {pid: len(errs) for pid, errs in errs_by_pid.items()}
|
||||
self._node_stats[hostname]["error_count"] = errs_by_pid
|
||||
|
||||
def _purge_outdated_stats(self):
|
||||
def current(then, now):
|
||||
if (now - then) > 5:
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
now = to_unix_time(datetime.utcnow())
|
||||
self._node_stats = {
|
||||
k: v
|
||||
for k, v in self._node_stats.items() if current(v["now"], now)
|
||||
}
|
||||
|
||||
def get_node_stats(self):
|
||||
with self._node_stats_lock:
|
||||
self._purge_outdated_stats()
|
||||
self._insert_error_counts()
|
||||
self._insert_log_counts()
|
||||
node_stats = sorted(
|
||||
(v for v in self._node_stats.values()),
|
||||
key=itemgetter("boot_time"))
|
||||
return {"clients": node_stats}
|
||||
|
||||
# Gets actors in a flat way to allow for grouping by actor type.
|
||||
def get_actors(self, workers_info_by_node, infeasible_tasks, ready_tasks):
|
||||
now = time.time()
|
||||
actors: Dict[str, Dict[str, any]] = {}
|
||||
# construct flattened actor tree
|
||||
with self._node_stats_lock:
|
||||
for addr, actor_id in self._addr_to_actor_id.items():
|
||||
actors[actor_id] = copy.deepcopy(self._default_info)
|
||||
actors[actor_id].update(self._addr_to_extra_info_dict[addr])
|
||||
|
||||
for node_id, workers_info in workers_info_by_node.items():
|
||||
for core_worker_stats in workers_info:
|
||||
addr = (core_worker_stats["ipAddress"],
|
||||
str(core_worker_stats["port"]))
|
||||
if addr in self._addr_to_actor_id:
|
||||
actor_info = actors[self._addr_to_actor_id[addr]]
|
||||
format_reply_id(core_worker_stats)
|
||||
actor_info.update(core_worker_stats)
|
||||
actor_info["averageTaskExecutionSpeed"] = round(
|
||||
actor_info["numExecutedTasks"] /
|
||||
(now - actor_info["timestamp"] / 1000), 2)
|
||||
actor_info["nodeId"] = node_id
|
||||
actor_info["pid"] = core_worker_stats["pid"]
|
||||
|
||||
def _update_from_actor_tasks(task, task_spec_type,
|
||||
invalid_state_type):
|
||||
actor_id = ray.utils.binary_to_hex(
|
||||
b64decode(task[task_spec_type]["actorId"]))
|
||||
if invalid_state_type == "pendingActor":
|
||||
task["state"] = -1
|
||||
elif invalid_state_type == "infeasibleActor":
|
||||
task["state"] = -2
|
||||
else:
|
||||
raise ValueError(
|
||||
"Invalid argument"
|
||||
f"invalid_state_type={invalid_state_type}")
|
||||
task["actorTitle"] = task["functionDescriptor"][
|
||||
"pythonFunctionDescriptor"]["className"]
|
||||
format_reply_id(task)
|
||||
actors[actor_id] = task
|
||||
|
||||
for infeasible_task in infeasible_tasks:
|
||||
_update_from_actor_tasks(infeasible_task,
|
||||
"actorCreationTaskSpec",
|
||||
"infeasibleActor")
|
||||
|
||||
for ready_task in ready_tasks:
|
||||
_update_from_actor_tasks(ready_task, "actorCreationTaskSpec",
|
||||
"pendingActor")
|
||||
actor_groups = _group_actors_by_python_class(actors)
|
||||
stats_by_group = {
|
||||
name: _get_actor_group_stats(group)
|
||||
for name, group in actor_groups.items()
|
||||
}
|
||||
|
||||
response_data = {}
|
||||
for name, group in actor_groups.items():
|
||||
response_data[name] = {
|
||||
"entries": group,
|
||||
"summary": stats_by_group[name]
|
||||
}
|
||||
return response_data
|
||||
|
||||
def get_logs(self, hostname, pid):
|
||||
ip = self._node_stats.get(hostname, {"ip": None})["ip"]
|
||||
logs = self._logs.get(ip, {})
|
||||
if pid:
|
||||
logs = {pid: logs.get(pid, [])}
|
||||
return logs
|
||||
|
||||
def get_errors(self, hostname, pid):
|
||||
ip = self._node_stats.get(hostname, {"ip": None})["ip"]
|
||||
errors = self._errors.get(ip, {})
|
||||
if pid:
|
||||
errors = {pid: errors.get(pid, [])}
|
||||
return errors
|
||||
|
||||
def run(self):
|
||||
p = self.redis_client.pubsub(ignore_subscribe_messages=True)
|
||||
|
||||
p.psubscribe(self.redis_key)
|
||||
logger.info("NodeStats: subscribed to {}".format(self.redis_key))
|
||||
|
||||
log_channel = ray.gcs_utils.LOG_FILE_CHANNEL
|
||||
p.subscribe(log_channel)
|
||||
logger.info("NodeStats: subscribed to {}".format(log_channel))
|
||||
|
||||
error_channel = ray.gcs_utils.RAY_ERROR_PUBSUB_PATTERN
|
||||
p.psubscribe(error_channel)
|
||||
logger.info("NodeStats: subscribed to {}".format(error_channel))
|
||||
|
||||
actor_channel = ray.gcs_utils.RAY_ACTOR_PUBSUB_PATTERN
|
||||
p.psubscribe(actor_channel)
|
||||
logger.info("NodeStats: subscribed to {}".format(actor_channel))
|
||||
|
||||
current_actor_table = ray.actors()
|
||||
with self._node_stats_lock:
|
||||
for actor_data in current_actor_table.values():
|
||||
addr = (actor_data["Address"]["IPAddress"],
|
||||
str(actor_data["Address"]["Port"]))
|
||||
owner_addr = (actor_data["OwnerAddress"]["IPAddress"],
|
||||
str(actor_data["OwnerAddress"]["Port"]))
|
||||
self._addr_to_owner_addr[addr] = owner_addr
|
||||
self._addr_to_actor_id[addr] = actor_data["ActorID"]
|
||||
self._addr_to_extra_info_dict[addr] = {
|
||||
"jobId": actor_data["JobID"],
|
||||
"state": actor_data["State"],
|
||||
"timestamp": actor_data["Timestamp"]
|
||||
}
|
||||
|
||||
for x in p.listen():
|
||||
try:
|
||||
with self._node_stats_lock:
|
||||
channel = ray.utils.decode(x["channel"])\
|
||||
if "pattern" not in x or x["pattern"] is None\
|
||||
else x["pattern"]
|
||||
data = x["data"]
|
||||
if channel == log_channel:
|
||||
data = json.loads(ray.utils.decode(data))
|
||||
ip = data["ip"]
|
||||
pid = str(data["pid"])
|
||||
self._logs[ip][pid].extend(data["lines"])
|
||||
elif channel == str(error_channel):
|
||||
pubsub_msg = ray.gcs_utils.PubSubMessage.FromString(
|
||||
data)
|
||||
error_data = ray.gcs_utils.ErrorTableData.FromString(
|
||||
pubsub_msg.data)
|
||||
message = error_data.error_message
|
||||
message = re.sub(r"\x1b\[\d+m", "", message)
|
||||
match = re.search(r"\(pid=(\d+), ip=(.*?)\)", message)
|
||||
if match:
|
||||
pid = match.group(1)
|
||||
ip = match.group(2)
|
||||
self._errors[ip][pid].append({
|
||||
"message": message,
|
||||
"timestamp": error_data.timestamp,
|
||||
"type": error_data.type
|
||||
})
|
||||
elif channel == actor_channel:
|
||||
pubsub_msg = ray.gcs_utils.PubSubMessage.FromString(
|
||||
data)
|
||||
actor_data = ray.gcs_utils.ActorTableData.FromString(
|
||||
pubsub_msg.data)
|
||||
addr = (actor_data.address.ip_address,
|
||||
str(actor_data.address.port))
|
||||
owner_addr = (actor_data.owner_address.ip_address,
|
||||
str(actor_data.owner_address.port))
|
||||
self._addr_to_owner_addr[addr] = owner_addr
|
||||
self._addr_to_actor_id[addr] = ray.utils.binary_to_hex(
|
||||
actor_data.actor_id)
|
||||
self._addr_to_extra_info_dict[addr] = {
|
||||
"jobId": ray.utils.binary_to_hex(
|
||||
actor_data.job_id),
|
||||
"state": actor_data.state,
|
||||
"timestamp": actor_data.timestamp
|
||||
}
|
||||
elif channel == ray.gcs_utils.RAY_REPORTER_PUBSUB_PATTERN:
|
||||
data = json.loads(ray.utils.decode(data))
|
||||
self._ip_to_hostname[data["ip"]] = data["hostname"]
|
||||
self._node_stats[data["hostname"]] = data
|
||||
else:
|
||||
try:
|
||||
data = json.loads(ray.utils.decode(data))
|
||||
except Exception as e:
|
||||
data = f"Failed to load data because of {e}"
|
||||
logger.warning("Unexpected channel data received, "
|
||||
f"channel: {channel}, data: {data}")
|
||||
|
||||
except Exception:
|
||||
logger.exception(traceback.format_exc())
|
||||
continue
|
||||
@@ -1 +0,0 @@
|
||||
from ray.tests.conftest import * # noqa
|
||||
@@ -1,82 +0,0 @@
|
||||
import os
|
||||
|
||||
from datetime import datetime
|
||||
from time import sleep
|
||||
|
||||
import ray
|
||||
import pytest
|
||||
|
||||
from ray.dashboard.node_stats import NodeStats
|
||||
from ray.ray_constants import REDIS_DEFAULT_PASSWORD
|
||||
from ray.test_utils import wait_for_condition
|
||||
|
||||
|
||||
def start_node_stats(redis_address):
|
||||
redis_password = REDIS_DEFAULT_PASSWORD
|
||||
node_stats = NodeStats(redis_address, redis_password)
|
||||
node_stats.start()
|
||||
# Wait for node stats to fire up.
|
||||
MAX_START_TIME_S = 30
|
||||
t_start = datetime.now()
|
||||
while True:
|
||||
try:
|
||||
stats = node_stats.get_node_stats()
|
||||
client_stats = stats and stats.get("clients")
|
||||
if not client_stats:
|
||||
sleep(3)
|
||||
if (datetime.now() - t_start).seconds > MAX_START_TIME_S:
|
||||
pytest.fail("Node stats took too long to start up")
|
||||
continue
|
||||
break
|
||||
except Exception:
|
||||
continue
|
||||
return node_stats
|
||||
|
||||
|
||||
def test_basic(ray_start_with_dashboard):
|
||||
"""Dashboard test that starts a Ray cluster with a dashboard server running,
|
||||
then hits the dashboard API and asserts that it receives sensible data."""
|
||||
node_stats = start_node_stats(ray_start_with_dashboard["redis_address"])
|
||||
stats = node_stats.get_node_stats()
|
||||
client_stats = stats and stats.get("clients")
|
||||
|
||||
assert len(client_stats) == 1
|
||||
client = client_stats[0]
|
||||
print(client)
|
||||
assert len(client["workers"]) == 1
|
||||
|
||||
|
||||
def test_log_and_error_messages(ray_start_with_dashboard):
|
||||
node_stats = start_node_stats(ray_start_with_dashboard["redis_address"])
|
||||
|
||||
LOG_MESSAGE = "LOG_MESSAGE"
|
||||
LOG_TIMES = 3
|
||||
|
||||
@ray.remote
|
||||
def generate_log():
|
||||
for _ in range(LOG_TIMES):
|
||||
print(LOG_MESSAGE)
|
||||
return os.getpid()
|
||||
|
||||
pid = str(ray.get(generate_log.remote()))
|
||||
stats = node_stats.get_node_stats()
|
||||
client_stats = stats and stats.get("clients")
|
||||
assert len(client_stats) == 1, "Client stats is not available."
|
||||
hostname = client_stats[0]["hostname"]
|
||||
|
||||
wait_for_condition(
|
||||
lambda: len(node_stats.get_logs(hostname, pid)[pid]) == 3)
|
||||
|
||||
@ray.remote
|
||||
class Actor:
|
||||
def get_pid(self):
|
||||
return os.getpid()
|
||||
|
||||
def generate_error(self):
|
||||
raise Exception(LOG_MESSAGE)
|
||||
|
||||
actor = Actor.remote()
|
||||
pid = str(ray.get(actor.get_pid.remote()))
|
||||
actor.generate_error.remote()
|
||||
wait_for_condition(
|
||||
lambda: len(node_stats.get_errors(hostname, pid)[pid]) == 1)
|
||||
@@ -1,75 +0,0 @@
|
||||
import datetime
|
||||
import random
|
||||
import socket
|
||||
|
||||
from base64 import b64decode
|
||||
|
||||
import ray
|
||||
|
||||
|
||||
def to_unix_time(dt):
|
||||
return (dt - datetime.datetime(1970, 1, 1)).total_seconds()
|
||||
|
||||
|
||||
def round_resource_value(quantity):
|
||||
if quantity.is_integer():
|
||||
return int(quantity)
|
||||
else:
|
||||
return round(quantity, 2)
|
||||
|
||||
|
||||
def format_reply_id(reply):
|
||||
if isinstance(reply, dict):
|
||||
for k, v in reply.items():
|
||||
if isinstance(v, dict) or isinstance(v, list):
|
||||
format_reply_id(v)
|
||||
else:
|
||||
if k.endswith("Id"):
|
||||
v = b64decode(v)
|
||||
reply[k] = ray.utils.binary_to_hex(v)
|
||||
elif isinstance(reply, list):
|
||||
for item in reply:
|
||||
format_reply_id(item)
|
||||
|
||||
|
||||
def format_resource(resource_name, quantity):
|
||||
if resource_name == "object_store_memory" or resource_name == "memory":
|
||||
# Convert to 50MiB chunks and then to GiB
|
||||
quantity = quantity * (50 * 1024 * 1024) / (1024 * 1024 * 1024)
|
||||
return "{} GiB".format(round_resource_value(quantity))
|
||||
return "{}".format(round_resource_value(quantity))
|
||||
|
||||
|
||||
def measures_to_dict(measures):
|
||||
measures_dict = {}
|
||||
for measure in measures:
|
||||
tags = measure["tags"].split(",")[-1]
|
||||
if "intValue" in measure:
|
||||
measures_dict[tags] = measure["intValue"]
|
||||
elif "doubleValue" in measure:
|
||||
measures_dict[tags] = measure["doubleValue"]
|
||||
return measures_dict
|
||||
|
||||
|
||||
def get_unused_port():
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
s.bind(("", 0))
|
||||
port = s.getsockname()[1]
|
||||
|
||||
# Try to generate a port that is far above the 'next available' one.
|
||||
# This solves issue #8254 where GRPC fails because the port assigned
|
||||
# from this method has been used by a different process.
|
||||
for _ in range(30):
|
||||
new_port = random.randint(port, 65535)
|
||||
new_s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
try:
|
||||
new_s.bind(("", new_port))
|
||||
except OSError:
|
||||
new_s.close()
|
||||
continue
|
||||
s.close()
|
||||
new_s.close()
|
||||
return new_port
|
||||
print("Unable to succeed in selecting a random port.")
|
||||
s.close()
|
||||
return port
|
||||
@@ -616,25 +616,6 @@ class Node:
|
||||
process_info,
|
||||
]
|
||||
|
||||
def start_reporter(self):
|
||||
"""Start the reporter."""
|
||||
stdout_file, stderr_file = self.get_log_file_handles(
|
||||
"reporter", unique=True)
|
||||
|
||||
process_info = ray._private.services.start_reporter(
|
||||
self.redis_address,
|
||||
self._ray_params.metrics_agent_port,
|
||||
self._metrics_export_port,
|
||||
stdout_file=stdout_file,
|
||||
stderr_file=stderr_file,
|
||||
redis_password=self._ray_params.redis_password,
|
||||
fate_share=self.kernel_fate_share)
|
||||
assert ray_constants.PROCESS_TYPE_REPORTER not in self.all_processes
|
||||
if process_info is not None:
|
||||
self.all_processes[ray_constants.PROCESS_TYPE_REPORTER] = [
|
||||
process_info,
|
||||
]
|
||||
|
||||
def start_dashboard(self, require_dashboard):
|
||||
"""Start the dashboard.
|
||||
|
||||
|
||||
@@ -1,319 +0,0 @@
|
||||
import argparse
|
||||
import logging
|
||||
import json
|
||||
import os
|
||||
import traceback
|
||||
import time
|
||||
import datetime
|
||||
import grpc
|
||||
import platform
|
||||
import subprocess
|
||||
import sys
|
||||
from concurrent import futures
|
||||
|
||||
import ray
|
||||
import psutil
|
||||
|
||||
import ray.ray_constants as ray_constants
|
||||
import ray._private.services
|
||||
import ray.utils
|
||||
from ray.core.generated import reporter_pb2
|
||||
from ray.core.generated import reporter_pb2_grpc
|
||||
from ray.metrics_agent import MetricsAgent
|
||||
|
||||
# Logger for this module. It should be configured at the entry point
|
||||
# into the program using Ray. Ray provides a default configuration at
|
||||
# entry/init points.
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
try:
|
||||
import gpustat.core as gpustat
|
||||
except ImportError:
|
||||
gpustat = None
|
||||
logger.warning(
|
||||
"Install gpustat with 'pip install gpustat' to enable GPU monitoring.")
|
||||
|
||||
|
||||
class ReporterServer(reporter_pb2_grpc.ReporterServiceServicer):
|
||||
def __init__(self, metrics_agent):
|
||||
self.metrics_agent = metrics_agent
|
||||
|
||||
def GetProfilingStats(self, request, context):
|
||||
pid = request.pid
|
||||
duration = request.duration
|
||||
profiling_file_path = os.path.join(ray.utils.get_ray_temp_dir(),
|
||||
f"{pid}_profiling.txt")
|
||||
sudo = "sudo" if ray.utils.get_user() != "root" else ""
|
||||
process = subprocess.Popen(
|
||||
(f"{sudo} $(which py-spy) record -o {profiling_file_path} -p {pid}"
|
||||
f" -d {duration} -f speedscope"),
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE,
|
||||
shell=True)
|
||||
stdout, stderr = process.communicate()
|
||||
if process.returncode != 0:
|
||||
profiling_stats = ""
|
||||
else:
|
||||
with open(profiling_file_path, "r") as f:
|
||||
profiling_stats = f.read()
|
||||
return reporter_pb2.GetProfilingStatsReply(
|
||||
profiling_stats=profiling_stats, std_out=stdout, std_err=stderr)
|
||||
|
||||
def ReportOCMetrics(self, request, context):
|
||||
try:
|
||||
self.metrics_agent.record_metric_points_from_protobuf(
|
||||
request.metrics)
|
||||
except Exception:
|
||||
logger.error(traceback.format_exc())
|
||||
|
||||
return reporter_pb2.ReportOCMetricsReply()
|
||||
|
||||
|
||||
def recursive_asdict(o):
|
||||
if isinstance(o, tuple) and hasattr(o, "_asdict"):
|
||||
return recursive_asdict(o._asdict())
|
||||
|
||||
if isinstance(o, (tuple, list)):
|
||||
L = []
|
||||
for k in o:
|
||||
L.append(recursive_asdict(k))
|
||||
return L
|
||||
|
||||
if isinstance(o, dict):
|
||||
D = {k: recursive_asdict(v) for k, v in o.items()}
|
||||
return D
|
||||
|
||||
return o
|
||||
|
||||
|
||||
def jsonify_asdict(o):
|
||||
return json.dumps(recursive_asdict(o))
|
||||
|
||||
|
||||
def is_worker(cmdline):
|
||||
return cmdline and cmdline[0].startswith("ray::")
|
||||
|
||||
|
||||
def to_posix_time(dt):
|
||||
return (dt - datetime.datetime(1970, 1, 1)).total_seconds()
|
||||
|
||||
|
||||
class Reporter:
|
||||
"""A monitor process for monitoring Ray nodes.
|
||||
|
||||
Attributes:
|
||||
host (str): The hostname of this machine. Used to improve the log
|
||||
messages published to Redis.
|
||||
redis_client: A client used to communicate with the Redis server.
|
||||
"""
|
||||
|
||||
def __init__(self,
|
||||
redis_address,
|
||||
port,
|
||||
metrics_export_port,
|
||||
redis_password=None):
|
||||
"""Initialize the reporter object."""
|
||||
self.cpu_counts = (psutil.cpu_count(), psutil.cpu_count(logical=False))
|
||||
self.ip = ray._private.services.get_node_ip_address()
|
||||
self.hostname = platform.node()
|
||||
self.port = port
|
||||
self.metrics_agent = MetricsAgent(metrics_export_port)
|
||||
self.reporter_grpc_server = ReporterServer(self.metrics_agent)
|
||||
|
||||
_ = psutil.cpu_percent() # For initialization
|
||||
|
||||
self.redis_key = f"{ray.gcs_utils.REPORTER_CHANNEL}.{self.hostname}"
|
||||
self.redis_client = ray._private.services.create_redis_client(
|
||||
redis_address, password=redis_password)
|
||||
|
||||
self.network_stats_hist = [(0, (0.0, 0.0))] # time, (sent, recv)
|
||||
|
||||
@staticmethod
|
||||
def get_cpu_percent():
|
||||
return psutil.cpu_percent()
|
||||
|
||||
@staticmethod
|
||||
def get_gpu_usage():
|
||||
if gpustat is None:
|
||||
return []
|
||||
gpu_utilizations = []
|
||||
gpus = []
|
||||
try:
|
||||
gpus = gpustat.new_query().gpus
|
||||
except Exception as e:
|
||||
logger.debug(f"gpustat failed to retrieve GPU information: {e}")
|
||||
for gpu in gpus:
|
||||
# Note the keys in this dict have periods which throws
|
||||
# off javascript so we change .s to _s
|
||||
gpu_data = {
|
||||
"_".join(key.split(".")): val
|
||||
for key, val in gpu.entry.items()
|
||||
}
|
||||
gpu_utilizations.append(gpu_data)
|
||||
return gpu_utilizations
|
||||
|
||||
@staticmethod
|
||||
def get_boot_time():
|
||||
return psutil.boot_time()
|
||||
|
||||
@staticmethod
|
||||
def get_network_stats():
|
||||
ifaces = [
|
||||
v for k, v in psutil.net_io_counters(pernic=True).items()
|
||||
if k[0] == "e"
|
||||
]
|
||||
|
||||
sent = sum((iface.bytes_sent for iface in ifaces))
|
||||
recv = sum((iface.bytes_recv for iface in ifaces))
|
||||
return sent, recv
|
||||
|
||||
@staticmethod
|
||||
def get_mem_usage():
|
||||
vm = psutil.virtual_memory()
|
||||
return vm.total, vm.available, vm.percent
|
||||
|
||||
@staticmethod
|
||||
def get_disk_usage():
|
||||
dirs = [
|
||||
os.environ["USERPROFILE"] if sys.platform == "win32" else os.sep,
|
||||
ray.utils.get_user_temp_dir(),
|
||||
]
|
||||
return {x: psutil.disk_usage(x) for x in dirs}
|
||||
|
||||
@staticmethod
|
||||
def get_workers():
|
||||
return [
|
||||
x.as_dict(attrs=[
|
||||
"pid",
|
||||
"create_time",
|
||||
"cpu_percent",
|
||||
"cpu_times",
|
||||
"cmdline",
|
||||
"memory_info",
|
||||
]) for x in psutil.process_iter(attrs=["cmdline"])
|
||||
if is_worker(x.info["cmdline"])
|
||||
]
|
||||
|
||||
def get_load_avg(self):
|
||||
if sys.platform == "win32":
|
||||
cpu_percent = psutil.cpu_percent()
|
||||
load = (cpu_percent, cpu_percent, cpu_percent)
|
||||
else:
|
||||
load = os.getloadavg()
|
||||
per_cpu_load = tuple((round(x / self.cpu_counts[0], 2) for x in load))
|
||||
return load, per_cpu_load
|
||||
|
||||
def get_all_stats(self):
|
||||
now = to_posix_time(datetime.datetime.utcnow())
|
||||
network_stats = self.get_network_stats()
|
||||
|
||||
self.network_stats_hist.append((now, network_stats))
|
||||
self.network_stats_hist = self.network_stats_hist[-7:]
|
||||
then, prev_network_stats = self.network_stats_hist[0]
|
||||
netstats = ((network_stats[0] - prev_network_stats[0]) / (now - then),
|
||||
(network_stats[1] - prev_network_stats[1]) / (now - then))
|
||||
|
||||
return {
|
||||
"now": now,
|
||||
"hostname": self.hostname,
|
||||
"ip": self.ip,
|
||||
"cpu": self.get_cpu_percent(),
|
||||
"cpus": self.cpu_counts,
|
||||
"mem": self.get_mem_usage(),
|
||||
"workers": self.get_workers(),
|
||||
"boot_time": self.get_boot_time(),
|
||||
"load_avg": self.get_load_avg(),
|
||||
"disk": self.get_disk_usage(),
|
||||
"gpus": self.get_gpu_usage(),
|
||||
"net": netstats,
|
||||
}
|
||||
|
||||
def perform_iteration(self):
|
||||
"""Get any changes to the log files and push updates to Redis."""
|
||||
stats = self.get_all_stats()
|
||||
|
||||
self.redis_client.publish(
|
||||
self.redis_key,
|
||||
jsonify_asdict(stats),
|
||||
)
|
||||
|
||||
def run(self):
|
||||
thread_pool = futures.ThreadPoolExecutor(max_workers=10)
|
||||
server = grpc.server(thread_pool, options=(("grpc.so_reuseport", 0), ))
|
||||
reporter_pb2_grpc.add_ReporterServiceServicer_to_server(
|
||||
self.reporter_grpc_server, server)
|
||||
port = server.add_insecure_port(f"[::]:{self.port}")
|
||||
|
||||
server.start()
|
||||
# Publish the port.
|
||||
self.redis_client.set(f"REPORTER_PORT:{self.ip}", port)
|
||||
"""Run the reporter."""
|
||||
while True:
|
||||
try:
|
||||
self.perform_iteration()
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
pass
|
||||
|
||||
time.sleep(ray_constants.REPORTER_UPDATE_INTERVAL_MS / 1000)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser(
|
||||
description=("Parse Redis server for the "
|
||||
"reporter to connect to."))
|
||||
parser.add_argument(
|
||||
"--redis-address",
|
||||
required=True,
|
||||
type=str,
|
||||
help="The address to use for Redis.")
|
||||
parser.add_argument(
|
||||
"--port",
|
||||
required=True,
|
||||
type=int,
|
||||
help="The port to bind the reporter process.")
|
||||
parser.add_argument(
|
||||
"--metrics-export-port",
|
||||
required=True,
|
||||
type=int,
|
||||
help="The port to expose metrics through Prometheus.")
|
||||
parser.add_argument(
|
||||
"--redis-password",
|
||||
required=False,
|
||||
type=str,
|
||||
default=None,
|
||||
help="the password to use for Redis")
|
||||
parser.add_argument(
|
||||
"--logging-level",
|
||||
required=False,
|
||||
type=str,
|
||||
default=ray_constants.LOGGER_LEVEL,
|
||||
choices=ray_constants.LOGGER_LEVEL_CHOICES,
|
||||
help=ray_constants.LOGGER_LEVEL_HELP)
|
||||
parser.add_argument(
|
||||
"--logging-format",
|
||||
required=False,
|
||||
type=str,
|
||||
default=ray_constants.LOGGER_FORMAT,
|
||||
help=ray_constants.LOGGER_FORMAT_HELP)
|
||||
args = parser.parse_args()
|
||||
ray.ray_logging.setup_logger(args.logging_level, args.logging_format)
|
||||
|
||||
reporter = Reporter(
|
||||
args.redis_address,
|
||||
args.port,
|
||||
args.metrics_export_port,
|
||||
redis_password=args.redis_password)
|
||||
|
||||
try:
|
||||
reporter.run()
|
||||
except Exception as e:
|
||||
# Something went wrong, so push an error to all drivers.
|
||||
redis_client = ray._private.services.create_redis_client(
|
||||
args.redis_address, password=args.redis_password)
|
||||
traceback_str = ray.utils.format_error_message(traceback.format_exc())
|
||||
message = ("The reporter on node {} failed with the following "
|
||||
"error:\n{}".format(platform.node(), traceback_str))
|
||||
ray.utils.push_error_to_driver_through_redis(
|
||||
redis_client, ray_constants.REPORTER_DIED_ERROR, message)
|
||||
raise e
|
||||
Reference in New Issue
Block a user