I see what you mean. I think this is a good feature, and I will summarize
this into the design doc.

If you have any good suggestions,please let me know.

Sheng Wu <[email protected]> 于2019年12月13日周五 下午10:24写道:

> Hi Han Liu
>
> One more reminder, a trace id in one instance could have multiple threads
> sampling in theory, such as across threads scenarios. We also should set a
> threshold for this. Max 3 threads for one trace id maybe?
>
> Sheng Wu 吴晟
> Twitter, wusheng1108
>
>
> Sheng Wu <[email protected]> 于2019年12月13日周五 下午1:03写道:
>
> > Hi Han Liu and everyone
> >
> > I have submitted a design draft to the doc. Please take a look, if you
> > have an issue, please let me known. We could set up a online meeting too.
> >
> > Sheng Wu <[email protected]>于2019年12月12日 周四下午8:49写道:
> >
> >> Hi Han Liu
> >>
> >> I have replied the design with the most important key points I expect.
> >> Let's discuss those. After we are on the same page, we could continue on
> >> more details.
> >>
> >> Sheng Wu 吴晟
> >> Twitter, wusheng1108
> >>
> >>
> >> han liu <[email protected]> 于2019年12月12日周四 下午2:26写道:
> >>
> >>> Due to formatting issues with previous mailboxes, they have been
> replaced
> >>> with new ones.
> >>>
> >>> I have completed some of the features in the google doc, and can
> provide
> >>> your comments and improvements. I will continue to improve the
> following
> >>> functions in the documentation.
> >>> The documentation is the same as you previously sent me. To prevent
> >>> trouble, I'll post the link again here.
> >>>
> >>>
> https://docs.google.com/document/d/1rxMf1WN3PaFaZp7r8JmtwfdkmjLTcFW_ETAZv5FIU-s/edit#
> >>>
> >>> Sheng Wu <[email protected]> 于2019年12月10日周二 上午10:46写道:
> >>>
> >>> > 741550557 <[email protected]> 于2019年12月9日周一 下午9:42写道:
> >>> >
> >>> > > Thank for your reply, the issues you mentioned are very critical
> and
> >>> > > meaningful.
> >>> > > There I will answer what you mentioned. Sorry, I'm not good at
> >>> comment
> >>> > > mode, so I use different colors and “ “ prefix to QA.
> >>> > >
> >>> > >
> >>> > >  As we already have designed limit mechanism at backend and agent
> >>> > >  side(according to your design), also the number would not be
> big(10
> >>> most
> >>> > >  likely), we just need a list to storage the trace-id(s)
> >>> > >
> >>> > >
> >>> > > If just need a list to storage trace-id(s), so how can I map to the
> >>> > > thread? I hope to use the map to quickly find thread info from
> >>> trace-id.
> >>> > > How can I get thread-stack information from your way? Could you
> >>> please
> >>> > > help elaborate?
> >>> > >
> >>> >
> >>> > Why do you need to do that? You just save a list of thread ids which
> >>> should
> >>> > do thread dump, or remove some thread id from them when the trace id
> is
> >>> > finished.
> >>> > This is easy to do this by doing a loop search in the list. Right?
> >>> > Thread-stack is in the list, they are stored in an element. Also,
> they
> >>> are
> >>> > in a list too.
> >>> >
> >>> > I think you were thinking the same all stack in a single map? That
> will
> >>> > cause a very dangerous memory and GC risk.
> >>> >
> >>> >
> >>> >
> >>> > >
> >>> > >
> >>> > >  Could you explain the (2), what do you mean `stop`? I think if
> your
> >>> > >  sampling mechanism should include the sampling duration.
> >>> > >
> >>> > >
> >>> > > As far as the communication between the sniffer and the OAP
> server, I
> >>> > hope
> >>> > > the sniffer only needs to obtain the thread-monitor task that needs
> >>> to be
> >>> > > monitored at this time. The termination condition can be stopped by
> >>> the
> >>> > > sniffer or the OAP server.
> >>> > > If It’s just an OAP server notification, it may be more
> complicated.
> >>> > Cause
> >>> > > OAP server need record sniffer has received the current command,
> and
> >>> > > sniffer is not stable, such as sniffer has shutdown when receiving
> >>> the
> >>> > > command, at this time, no thread information I have been collected.
> >>> > >
> >>> > >
> >>> > > I think that the active calculation termination by the OAP server
> can
> >>> > make
> >>> > > the monitoring more controllable, of course, the client can also
> >>> actively
> >>> > > report the end.
> >>> > > I think it’s necessary to provide a protection mechanism for the
> >>> sniffer
> >>> > > side, and it can be released quickly when the business peak period
> >>> or the
> >>> > > probe suddenly occupies a lot of CPU / memory resources. Therefore,
> >>> the
> >>> > > function of stopping monitoring can be provided in the UI
> interface,
> >>> so
> >>> > > that the sniffer can recover.
> >>> > > Sampling duration is required, but only as a default termination
> >>> > > thread-monitor condition.
> >>> > >
> >>> >
> >>> > But you should know, in the real case, the thread dump monitor is a
> >>> > sampling mechanism, you are even hard to know where they are
> happening.
> >>> > Then you have to send the stop notification to every instance.
> >>> > Even you could send the notification, but could you explain how you
> >>> know to
> >>> > stop?
> >>> > The scenario is, you are facing an issue, which trace and metrics
> can't
> >>> > explain, so you active thread dump, right? At the same time, you want
> >>> to
> >>> > stop?
> >>> >
> >>> > CPU and memory resources should be guaranteed by design level, such
> as
> >>> > 1. Limited thread dump task for one service.
> >>> > 2. Limited thread dump traces in the certain time window.
> >>> > For example, the OAP backend/UI would say, you only could
> >>> > 1. Set 3 thread dump commands in the same time window.
> >>> > 2. Every command will require the sampling thread dump number should
> be
> >>> > less than 5 traces. At the same time, in order to make this sampling
> >>> works,
> >>> > only active sampling thread dump after the trace executed more than
> >>> > 200ms(value is an example only).
> >>> > 3. Thread dump could be sent to the backend duration sampling to
> >>> reduce the
> >>> > memory cache.
> >>> > 4. Thread dump period should not less than 5ms, recommend 20ms
> >>> > 5. How depth the thread dump should do
> >>> >
> >>> > We need a very detailed design, above are just my thoughts, in order
> to
> >>> > share the idea, the safe of the agent should not be by UI button.
> >>> > Otherwise, your online system will be very dangerous, which is not
> the
> >>> > design goal of SkyWalking.
> >>> >
> >>> >
> >>> >
> >>> > >
> >>> > >
> >>> > >  The sampling period depends on how you are going to visualize it.
> >>> > >
> >>> > >
> >>> > > Yes, I agree. I hope can provide a select/input let trace count and
> >>> time
> >>> > > windows can be configurable in UI. Of course, this is my current
> >>> idea,
> >>> > and
> >>> > > if there have other plains, I will adopt it.
> >>> > >
> >>> > >
> >>> > >  Highly doubt about this, reduce the memory, maybe, only reduce if
> >>> the
> >>> > > codes
> >>> > >  are running the loop or facing lock issue. But if it is neither of
> >>> these
> >>> > >  two, they are different.
> >>> > >  Also, please consider the CPU cost of the comparison of the stack.
> >>> You
> >>> > > need
> >>> > >  a performance benchmark to verify if you want this.
> >>> > >
> >>> > >
> >>> > > I didn’t understand that first sentence. In my personal experience,
> >>> most
> >>> > > of the cases are blocking in the lock(socket/local) and running
> >>> loop. I
> >>> > > have not imagined any other cases?
> >>> > > For the second sentence, I think I can add a thread-stack-element
> >>> field
> >>> > to
> >>> > > storage the top-level element of last stack information. When get
> >>> stack
> >>> > > information next time, I can compare the current top-level element
> >>> that
> >>> > is
> >>> > > the same with that field.
> >>> > > I do this mainly to reduce duplicate thread-stack information form
> >>> taking
> >>> > > up too much memory space, this is a way to optimizing memory space.
> >>> It
> >>> > can
> >>> > > consider remove it, or do you have a better memory-saving solution?
> >>> After
> >>> > > all, memory and CPU resources are very valuable in the sniffer.
> >>> > >
> >>> >
> >>> > I know you mean about reducing the memory, but do you consider how
> >>> much CPU
> >>> > you will cost do a full thread dump comparison? The thread dump could
> >>> > easily be hundreds of lines in Java.
> >>> > I mean this is a tradeoff, CPU or memory. If you are just using
> limited
> >>> > memory, before you could send the snapshot to backend while
> collecting
> >>> new,
> >>> > even could save into the disk(if really necessary).
> >>> > In my experience, compress is always very high risk in the agent, if
> >>> you
> >>> > want to do that, you need a benchmark test to improve that, this CPU
> >>> cost
> >>> > is small enough.
> >>> >
> >>> >
> >>> >
> >>> > >
> >>> > >
> >>> > >  The trace number and time window should be configurable, that is I
> >>> mean
> >>> > >  more complex. Inthe current SamplingServcie, only n traces per 3
> >>> > seconds.
> >>> > >  But here, it is a dynamic rule.
> >>> > >
> >>> > >
> >>> > > I expect that it can be configured at the UI level for special
> trace
> >>> > count
> >>> > > and time windows as I said above.
> >>> > > For SamplingService, my previous tech design was not rigorous
> >>> enough, and
> >>> > > there were indeed problems.
> >>> > > Maybe we need to extend a new SamplingService, build a mapping base
> >>> on
> >>> > > endpoint-id and AtomicInteger.
> >>> > > For `first 5 traces of this endpoint in the next 5 mins`, just need
> >>> to
> >>> > > increment it.
> >>> > > For sampling, maybe use another schedule task to reset
> AtomicInteger
> >>> > value.
> >>> > >
> >>> >
> >>> > You could avoid map, by using ArrayList with
> >>> RangeAtomicInteger(SkyWalking
> >>> > provides that) to let the trace context to get the slot.
> >>> > Also, you are considering `active sampling after trace execution time
> >>> more
> >>> > than xxx ms`, you should add remove mechanism during runtime.
> >>> > Anyway, try your best to avoid using Map, especially this map could
> be
> >>> > changed in the runtime.
> >>> >
> >>> >
> >>> >
> >>> > >
> >>> > >
> >>> > >  I think at least should be a level one new page called
> >>> configuration or
> >>> > >  command page, which could set up the multiple sampling rule and
> >>> > visualize
> >>> > >  the existing tasks and related sampling data.
> >>> > >
> >>> > >
> >>> > > I think it’s necessary to add a new page to the configuration
> >>> > > thread-monitor task, I think the specific UI display should be
> >>> designed
> >>> > in
> >>> > > detail.
> >>> > > For example, what I expected is similar to the trace page. The left
> >>> side
> >>> > > displays the configuration, and the right side quickly displays the
> >>> > related
> >>> > > trace list. When clicked, it quickly links to the trace page and
> >>> displays
> >>> > > the sidebox display.
> >>> > > I ’m not good at this. Do you have any good plans?
> >>> > >
> >>> >
> >>> > UI is the thing that is hard to discuss by text, so I am pretty sure,
> >>> we
> >>> > need some demo(could not be the codes, that is I mean drew by a tool)
> >>> > It is OK to show a trace with thread dumps on another page, even
> better
> >>> > linking to your task ID.
> >>> > But this kind of abstract description is hard to continue, no
> details I
> >>> > mean.
> >>> >
> >>> >
> >>> >
> >>> > > And I feel that the two of us have a different understanding of the
> >>> > > configuration object. I think it is more of a task than a command.
> I
> >>> > don't
> >>> > > know which way is better?
> >>> > > I suddenly thought of a problem. I think that some real problems
> are
> >>> > often
> >>> > > triggered at a specific period, such as a fixed business peak
> >>> period, and
> >>> > > we cannot guarantee that the user will operate on the UI.
> >>> > > So should the task mechanism be adopted to ensure that it can be
> run
> >>> at a
> >>> > > specific period?
> >>> > >
> >>> >
> >>> > This makes sense to me, and it is a just enhance feature. It is just
> a
> >>> > start time sampling rule.
> >>> >
> >>> >
> >>> >
> >>> > >
> >>> > >
> >>> > >  We don't have separated thread monitor view table, how about we
> add
> >>> an
> >>> > > icon
> >>> > >  at the segment list, and add icon at the first span of this
> segment
> >>> in
> >>> > >  trace detail view?
> >>> > >  I think the latter one should be an entrance of the thread view.
> >>> > >
> >>> > >
> >>> > > I think it's a good idea. The link I mentioned in one of the
> answers
> >>> > > above, I think it is also a convenient entry point.
> >>> > > The switch button I mentioned earlier is only a data filtering item
> >>> in
> >>> > the
> >>> > > query of the trace list and does not need a separate table UI.
> >>> > >
> >>> >
> >>> > As you intend to have a separated page for thread sampling, it is OK
> to
> >>> >
> >>> >
> >>> > >
> >>> > >
> >>> > >  If you have some visualization idea, drawn by any tool you like
> >>> > supporting
> >>> > >  comment, we could discuss it there. In my mind, we should support
> >>> > > visualize
> >>> > >  the thread dump stack through the time windows, and support
> >>> aggregate
> >>> > them
> >>> > >  by choosing the continued stack snapshots on the time window.
> >>> > >
> >>> > >
> >>> > > I think we should find a front-end who is better at discussing
> >>> together
> >>> > > because this depends on how the front-end UI can be displayed.
> >>> > > BTW: I can provide code for the OAP server and sniffer, and the
> >>> frontend
> >>> > > may need to look for help in the community alone. Hope that any
> >>> front-end
> >>> > > friends can participate in the topic discussion.
> >>> > >
> >>> >
> >>> > Once you have the demo, I could loop our UI committers in for UI side
> >>> > development. But UI committers may not be familiar with thread dump
> >>> context
> >>> > story. We need to resolve that first.
> >>> > Let's start up a demo, such as some slides on Google doc?
> >>> >
> >>> >
> >>> > >
> >>> > >
> >>> > >
> >>> > >
> >>> > > The above is my answer to all the questions, and I look forward to
> >>> your
> >>> > > reply at any time. As more and more discussions took place, the
> >>> details
> >>> > > became more and more complete. This is good.
> >>> > > Everyone is welcome to discuss together if you have any questions
> or
> >>> good
> >>> > > ideas, please let me know.
> >>> > >
> >>> >
> >>> > I think we could move the discussion to the design doc as the next
> >>> step.
> >>> >
> >>> > Please use this
> >>> >
> >>> >
> >>>
> https://docs.google.com/document/d/1rxMf1WN3PaFaZp7r8JmtwfdkmjLTcFW_ETAZv5FIU-s/edit#
> >>> > Trite the design including
> >>> > 1. Key features
> >>> > 2. Protocol
> >>> > 3. Work mechanism
> >>> > 4. UI design, prototype
> >>> > and anything you think important before writing codes.
> >>> >
> >>> > This is SkyWalking CLI design doc, you could use it as a reference.
> >>> >
> >>> >
> >>>
> https://docs.google.com/document/d/1WBnRNF0ABxaSdBZo6Gv2hMzCQzj04YAePUdOyLWHWew/edit#
> >>> >
> >>> >
> >>> > >
> >>> > >
> >>> > > 原始邮件
> >>> > > 发件人:Sheng [email protected]
> >>> > > 收件人:[email protected]
> >>> > > 发送时间:2019年12月9日(周一) 10:50
> >>> > > 主题:Re: A proposal for Skywalking(thread monitor)
> >>> > >
> >>> > >
> >>> > > Hi Thanks for writing this proposal with a detailed design. My
> >>> comments
> >>> > > are inline. 741550557 [email protected] 于2019年12月8日周日 下午11:22写道:
> >>> Thanks
> >>> > > for your reply, I have carefully read these issues you mentioned,
> >>> and
> >>> > > these issues mentioned are very meaningful and critical. I will
> >>> give  you
> >>> > > technical details about the issues you mentioned below.  I find
> these
> >>> > > issues are related, so I will explain them in different
> dimensions.
> >>> > use
> >>> > > a different protocol to transmission trace and thread-stack:  1.
> add
> >>> a
> >>> > > boolean field in segment data, to record has thread monitored.  and
> >>> is
> >>> > good
> >>> > > for filter monitored trace in UI.  2. add new BootService, storage
> >>> Map to
> >>> > > record relate trace-id and  trace-stack information.  As we already
> >>> have
> >>> > > designed limit mechanism at backend and agent side(according to
> your
> >>> > > design), also the number would not be big(10 most likely), we just
> >>> need a
> >>> > > list to storage the trace-id(s)  3. listen
> >>> > > TracingContextListener#afterFinished if the current segment has
> >>> thread
> >>> > > monitored, mark current trace-id don’t need to monitor anymore.
> >>> (Cause
> >>> > if
> >>> > > for-each the step 2 map, the remove operation will fail and throw
> >>> > > exception).  4. when thread-monitor main thread running, It will
> >>> for-each
> >>> > > step 2 map  and check is it don’t need monitor anymore, I will put
> >>> data
> >>> > > into new data  carrier.  5. generate new thread-monitor gRPC
> >>> protocol to
> >>> > > send data from the data  carrier. The agent side design seems
> pretty
> >>> > good.
> >>> > >   the server receives thread-stack logic:  1. storage stack-stack
> >>> > > informations and trace-id/segment-id relations on a  different
> >>> table.  2.
> >>> > > check thread-monitor is need to be stop on receiving data or
> >>> schedule.
> >>> > > Could you explain the (2), what do you mean `stop`? I think if your
> >>> > > sampling mechanism should include the sampling duration.    reduce
> >>> CPU
> >>> > and
> >>> > > memory in sniffer:  1. through the configuration of thread
> >>> monitoring in
> >>> > > the UI, you can  configure the performance loss. For example, set
> the
> >>> > > monitoring level: fast  monitoring (100ms), medium speed monitoring
> >>> > > (500ms), slow speed monitoring  (1000ms).  The sampling period
> >>> depends on
> >>> > > how you are going to visualize it.  2. add new integer field on per
> >>> > > thread-stack, if current thread-stack last  element same as last
> >>> time,
> >>> > > don’t need storage, just increment it. I think  it will save a lot
> of
> >>> > > memory space. Highly doubt about this, reduce the memory, maybe,
> only
> >>> > > reduce if the codes are running the loop or facing lock issue. But
> >>> if it
> >>> > is
> >>> > > neither of these two, they are different. Also, please consider the
> >>> CPU
> >>> > > cost of the comparison of the stack. You need a performance
> >>> benchmark to
> >>> > > verify if you want this. 3. create new VM args to setting
> >>> thread-monitor
> >>> > > pool size, It dependence on  user, maybe default 3? (this can be
> >>> > discussed
> >>> > > later)  I think UI limit is enough. 3 seems good to me.  4. limit
> >>> > > thread-stack-element size to 100, I think it can resolve most of
> the
> >>> > > scenes already. It also can create a new VM args if need.
> multiple
> >>> > > sampling methods can choose :(just my current thoughts, can add
> >>> more)
> >>> > 1.
> >>> > > base on current client SamplingServcie, extra a new factor holder
> to
> >>> > > increment, and reset on schedule.  Yours may be a little more
> complex
> >>> > than
> >>> > > the current SamplingServcie, right? Based on the next rule. 2.
> >>> `first 5
> >>> > > traces of this endpoint in the next 5 mins`, it a good idea. My
> >>> > > understanding is that within a few minutes, each instance can send
> a
> >>> > > specified number of traces.  The trace number and time window
> should
> >>> be
> >>> > > configurable, that is I mean more complex. Inthe current
> >>> SamplingServcie,
> >>> > > only n traces per 3 seconds. But here, it is a dynamic rule.    UI
> >>> > settings
> >>> > > and sniffer perception:  1. create a new button on the dashboard
> >>> page, It
> >>> > > can create or stop a  thread-monitor. It can be dynamic load
> >>> > thread-monitor
> >>> > > status when  reselecting endpoint.  I think at least should be a
> >>> level
> >>> > one
> >>> > > new page called configuration or command page, which could set up
> the
> >>> > > multiple sampling rule and visualize the existing tasks and related
> >>> > > sampling data.  2. sniffer creates a new scheduled task to check
> the
> >>> > > current service has  need monitor endpoint each 5 seconds. (I see
> >>> current
> >>> > > sniffer has command  functions, feel that principle is the same as
> >>> the
> >>> > > scheduler)  Seems reasonable.   thread-monitor on the UI:(That’s
> >>> just my
> >>> > > initial thoughts, I think there  will have a better way to show)
> 1.
> >>> When
> >>> > > switch to the trace page, I think we need to add a new switch
> >>> button to
> >>> > > filter thread-monitor trace.  2. make a new thread-monitor icon on
> >>> the
> >>> > same
> >>> > > segment. It means it has  thread-stack information.  We don't have
> >>> > > separated thread monitor view table, how about we add an icon at
> the
> >>> > > segment list, and add icon at the first span of this segment in
> trace
> >>> > > detail view? I think the latter one should be an entrance of the
> >>> thread
> >>> > > view. 3. show on the information sidebox when the user clicks the
> >>> > > thread-monitor  segment(any span). create a new tab, like the log
> >>> tab.
> >>> > If
> >>> > > you have some visualization idea, drawn by any tool you like
> >>> supporting
> >>> > > comment, we could discuss it there. In my mind, we should support
> >>> > visualize
> >>> > > the thread dump stack through the time windows, and support
> aggregate
> >>> > them
> >>> > > by choosing the continued stack snapshots on the time window.
> >>>  They're
> >>> > > just a description of my current implementation details for
> >>> > thread-monitor
> >>> > > if these seem to work. I can do some time planning for these
> tasks.
> >>> > Sorry,
> >>> > > my English is not very well, hope you can understand. Maybe  these
> >>> seem
> >>> > to
> >>> > > have some problem, any good idea or suggestion are welcome.  Very
> >>> > > appreciated you to lead this new direction. It is a long term task
> >>> but
> >>> > > should be interesting. :) Good work, carry on.      原始邮件  发件人:Sheng
> >>> > > [email protected]  收件人:[email protected]
> >>> > > 发送时间:2019年12月8日(周日) 08:31  主题:Re: A proposal for Skywalking(thread
> >>> > > monitor)    First of all, thanks for your proposal. Thread
> >>> monitoring is
> >>> > > super  important for application performance. So basically, I agree
> >>> with
> >>> > > this  proposal. But for tech details, I think we need more
> >>> discussion in
> >>> > > the  following ways 1. Do you want to add thread status to the
> >>> trace? If
> >>> > > so, why  don't consider this as a UI level join? Because we could
> >>> know
> >>> > > thread id in  the trace when we create a span, right? Then we have
> >>> all
> >>> > the
> >>> > > thread  dump(if), we could ask UI to query specific thread context
> >>> based
> >>> > > on  timestamp and thread number(s). 2. For thread dump, I don't
> know
> >>> > > whether  you do the performance evaluation for this OP. From my
> >>> > > experiences, `get  all need thread monitor segment every 100
> >>> > milliseconds`
> >>> > > is a very high cost  in your application and agent. So, you may
> need
> >>> to
> >>> > be
> >>> > > careful about doing  this. 3. Endpoint related thread dump with
> some
> >>> > > sampling mechanisms makes  more sense to me. And this should be
> >>> activated
> >>> > > by UI. We should only  provide a conditional thread dump sampling
> >>> > > mechanism, such as `first 5  traces of this endpoint in the next 5
> >>> mins`.
> >>> > > Jian Tan I think DaoCloud also  has customized this feature in your
> >>> > > internal SkyWalking. Could you share  what you do? Sheng Wu 吴晟
> >>> Twitter,
> >>> > > wusheng1108 741550557 [email protected]  于2019年12月8日周日 上午12:14写道:
> >>> Hello
> >>> > > everyone, I would like to share a new  feature with skywalking,
> >>> called
> >>> > > “thread monitor”. Background When our  company used skywalking to
> APM
> >>> > > earlier, we found that many traces did not  have enough span to
> fill
> >>> up,
> >>> > > doubting whether there were some third-party  frameworks that we
> >>> didn't
> >>> > > enhance or programmers API usage errors such as  java CountDown
> >>> number
> >>> > is 3
> >>> > > but there are only 2 countdowns. So we decide  to write a new
> >>> feature to
> >>> > > monitor executing trace thread stack, then we  can get more
> >>> information
> >>> > on
> >>> > > the trace, quick known what’s happening on  that trace. Structure
> >>> > > Agent(thread monitor) — gRPC protocol — OAP  Server(Storage) —
> >>> > > Skywalking-Rocketbot-UI More detail OAP Server:  1. Storage witch
> >>> traces
> >>> > > need to monitor(i suggest storage on the endpoint,  add new boolean
> >>> field
> >>> > > named needThreadMonitor) 2. Provide GraphQL API to  change endpoint
> >>> > monitor
> >>> > > status. 3. Monitor Trace parse, storage thread  stack if the
> segment
> >>> has
> >>> > > any thread info. Skywalking-Rocketbot-UI: 1.  Add a new switch
> >>> button on
> >>> > > the dashboard, It can read or modify endpoint  status. 2. It will
> >>> show
> >>> > > every thread stack on click trace detail.  Agent: 1. setup two new
> >>> > > BootService: 1) find any need thread monitor  endpoint in current
> >>> > service,
> >>> > > start on a new schedule take and works on  each minute. 2) start
> new
> >>> > > schedule task to get all need thread monitor  segment each 100
> >>> > > milliseconds, and put a new thread dump task to a global  thread
> >>> > > pool(fixed, count number default 3). 2. check endpoint need thread
> >>> > monitor
> >>> > > on create entry/local span(TracingConext#createEntry/LocalSpan).
> If
> >>> > need,
> >>> > > It will be marked and put into thread monitor map. 3. when
> >>> > TraceingContext
> >>> > > finishes, It will get thread has monitored, and send all  thread
> >>> stack to
> >>> > > server. Finally, I don’t know it is a good idea to get  more
> >>> information
> >>> > on
> >>> > > trace? If you have any good ideas or suggestions on  this, please
> >>> let me
> >>> > > know. Mrpro
> >>> >
> >>>
> >> --
> > Sheng Wu 吴晟
> >
> > Apache SkyWalking
> > Apache Incubator
> > Apache ShardingSphere, ECharts, DolphinScheduler podlings
> > Zipkin
> > Twitter, wusheng1108
> >
>

Reply via email to