Sundar, Supporting hotspot data structure in SA is already a maintenance nightmare ;)
So we can consider to provide high level API, like find_class_by_name to script writer. It allows anybody who are interesting with quick prototyping write his own program on top of SA with any language they want. -Dmitry On 11.12.19 15:47, sundararajan.athijegannat...@oracle.com wrote: > Effectively you're asking for SA as API. I don't think that is a good > idea. That implies supporting hotspot data structures as Java *API*. > That will be maintainability nightmare - we've to keep tracking hotspot > data structures in SA code. That itself is problematic. API would be > next level nightmare. > > -Sundar > > On 11/12/19 11:57 am, Yasumasa Suenaga wrote: >> Hi, >> >> IMHO we need to export all packages in SA if we do not provide new API >> for SA. >> sa.js in jdk.hotspot.agent could access all SA classes until JDK 8 >> (before Jigsaw), so we could make various functions if we need. >> >> OTOH we cannot know what classes are needed by the SA users. All >> packages in jdk.hotspot.agent module provides features, and they >> require other packages. For example, sun.jvm.hotspot.oops.Oop requires >> sun.jvm.hotspot.types, and it requires sun.jvm.hotspot.debugger . >> It is difficult to track and to export minimally. >> (I worked for it in JDK-8157947, but I gave up...) >> >> Thus I guess it is a big challenge to export SA classes without >> refactoring. >> If we provide new API for SA plugin, I guess we need to work some >> refactoring. >> >> >> Yasumasa >> >> >> On 2019/12/11 15:00, Chris Plummer wrote: >>> On 12/10/19 9:56 PM, Yasumasa Suenaga wrote: >>>> On 2019/12/11 14:39, Krystal Mok wrote: >>>>> Hi Yasumasa, >>>>> >>>>> That's a very nice idea. Basically what you're asking for is >>>>> exposing the Command interface [1] so that plugins can implement it >>>>> and get dynamically loaded / registered into CLHSDB / HSDB, right? >>>> >>>> Yes, but we also need proxy API to access internal SA objects e.g. >>>> CodeCache, JavaThread, TypeDataBase, etc... >>>> >>> Yes, or export them. I should have read this email before posting my >>> previous one. >>> >>> Chris >>>> >>>> Yasumasa >>>> >>>> >>>>> [1]: >>>>> http://hg.openjdk.java.net/jdk/jdk/file/c71ec1f09f21/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/CommandProcessor.java#l246 >>>>> >>>>> >>>>> - Kris >>>>> >>>>> On Tue, Dec 10, 2019 at 9:33 PM Yasumasa Suenaga >>>>> <suen...@oss.nttdata.com <mailto:suen...@oss.nttdata.com>> wrote: >>>>> >>>>> Hi Chris, >>>>> >>>>> It's a sad proposal, but I agree with you. To maintain SA in JS >>>>> is difficult since Jigsaw. >>>>> However I want SA to implement pluggable feature. >>>>> I use custom script to list compiled codes in CodeCache. >>>>> >>>>> I guess other troubleshooters also want similar feature (via >>>>> jsload) in future if they encounter JVM crash. >>>>> >>>>> >>>>> Thanks, >>>>> >>>>> Yasumasa >>>>> >>>>> >>>>> On 2019/12/11 11:52, Chris Plummer wrote: >>>>> > Hi, >>>>> > >>>>> > I like to propose the removal of SA javascript support. Few >>>>> people even realize this support exists, and hopefully even fewer >>>>> are using it since I'd like to remove it. Since I'm new to this >>>>> myself, let me first explain what I know about it's existence, and >>>>> then explain why I want to remove it. >>>>> > >>>>> > If you run "jhsdb clhsdb", there are jsload and jseval >>>>> commands. Don't look for them in anything post JDK 8. I'll explain >>>>> why later. jsload is used to load a javascript file. In that file >>>>> you can register new clhsdb commands that are written in >>>>> javascript. You can also evaluate javascript using the jseval >>>>> command. Some of this is explained in [1], which is the only place >>>>> I can find any reference to this support. It does not appear to be >>>>> officially supported, nor is there any oracle provided documentation. >>>>> > >>>>> > There also appear to be a few clhsdb commands that are >>>>> written in javascript. Doing a grep for "registerCommand" in sa.js >>>>> shows the following: >>>>> > >>>>> > registerCommand("class", "class name", "jclass"); >>>>> > registerCommand("classes", "classes", "jclasses"); >>>>> > registerCommand("dumpclass", "dumpclass { address | name } >>>>> [ directory ]", "dclass"); >>>>> > registerCommand("dumpheap", "dumpheap [ file ]", "dumpHeap"); >>>>> > registerCommand("mem", "mem address [ length ]", "printMem"); >>>>> > registerCommand("sysprops", "sysprops", "sysProps"); >>>>> > registerCommand("whatis", "whatis address", "printWhatis"); >>>>> > >>>>> > Once again, don't go looking for these in anything newer >>>>> than JDK8. You won't find them. Again the only documentation I can >>>>> fine is [1]. >>>>> > >>>>> > The other use of Javascript is the SOQL command (Simple >>>>> Object Query Language), a tool used to query the heap, and also the >>>>> JSDB command. The only SOQL documentation I could find is the blog >>>>> reference [2]. I could not find HSDB documentation, but I believe >>>>> is is a javascript support for looking at hotspot. So once again, >>>>> neither of these seem to be officially supported or documented. >>>>> > >>>>> > The real purpose of the email is to propose removal of this >>>>> support. Here are the reasons: >>>>> > >>>>> > (1) It's broken, and has been since 9. See [3]. This is why >>>>> you don't see the javascript related commands in clhsdb. Javascript >>>>> fails to initialize, so none of the javascript related commands are >>>>> registered. >>>>> > (2) Nashorn is deprecated and will be removed eventually. >>>>> > (3) We have very little understanding of the javascript >>>>> support. >>>>> > (4) No resources to work on it (unless there is a community >>>>> volunteer). >>>>> > (5) Very questionable value (lack of users). The fact this >>>>> support has been broken since JDK 9 and no bug was filed until I >>>>> did so this week is a good indication of that. Another is that >>>>> there are no other SA Javascript related bugs filed. Lastly, the >>>>> lack of any official documentation and only minimal mention of it >>>>> on the web is another good indication of it's (lack of) value. >>>>> > >>>>> > Also, regarding the 7 commands listed above that would be >>>>> lost (but currently don't work now anyway), if they are really >>>>> wanted, they could be implemented in java instead of javascript. >>>>> > >>>>> > I'd like to remove javascript support in two steps. The >>>>> first is simply disable the clhsdb code that tries to initialize >>>>> the javascript support. I'd like to do this in 14 (actually as soon >>>>> as possible). I'd like to actually do this now even if we decide to >>>>> keep javascript support and eventually fix it because it will get >>>>> rid of the warning you see whenever you attach from clhsdb: >>>>> > >>>>> > Warning! JS Engine can't start, some commands will not >>>>> be available. >>>>> > >>>>> > This warning will become more of an issue for the clhsdb >>>>> tests after I push [4] because then you will also see the full >>>>> stacktrace for the underlying exception that caused the Javascript >>>>> to fail to start. Besides being unnecessary noise in passing test >>>>> cases, it can also be misleading in any test that fails because the >>>>> exception will be unrelated to the failure. This is actually what >>>>> got me going down this path of what the javascript support is all >>>>> about. >>>>> > >>>>> > The next step would be to strip out all Javascript related >>>>> code, including the SOQL and JSDB tools. This would be done in 15. >>>>> > >>>>> > Please let me know what you think. >>>>> > >>>>> > thanks, >>>>> > >>>>> > Chris >>>>> > >>>>> > [1] >>>>> https://cr.openjdk.java.net/~minqi/6830717/raw_files/new/agent/doc/clhsdb.html >>>>> >>>>> > [2] >>>>> http://javatroubleshooting.blogspot.com/2015/12/serviceability-agent-part-3.html >>>>> >>>>> > [3] https://bugs.openjdk.java.net/browse/JDK-8235594 >>>>> > [4] https://bugs.openjdk.java.net/browse/JDK-8234277 >>>>> > >>>>> >>> >>>