Writing JVMTI Agent

I am working on a very simple JVMTI agent. The agent contains only one handler catching ClassLoadEvent. After building the agent as an shared object called "libmyprofiler.so" I tried to use the agent with Java SDK 1.5 Beta using command line argument:
"-agentpath:<absolute path>/libmyprofiler.so"
However, the VM returns error messages:
"Error occurred during initialization of VM"
"Could not find agent library in absolute path: <absolute path>/libmyprofiler.so"
What does the error message really mean? I am very sure the shared object is in the path I specified.
I have been unable to find any example agent on the web using JVMTI. Does anyone know such example. Thanks in advance.

see
http://forum.java.sun.com/thread.jsp?forum=37&thread=503374

Similar Messages

  • JVMTI agent and max heap

    Running an app with a JVMTI agent attached, I cannot specify a max heap greater than 320Mb, even on a 1Gb machine with hardly anything running. Specifying for example -Xms256m -Xmx512m results in following error:
    Error occurred during initialization of VM
    Could not reserve enough space for object heap
    Could not create the Java virtual machine.
    Anyone any ideas?
    Thanks,
    Luc

    This appears to be a duplicate of this post:
    http://forum.java.sun.com/thread.jspa?threadID=755278&tstart=0

  • Max heap limited when running with a JVMTI agent?

    Running an app with a JVMTI agent, I cannot specify a max heap greater than 320Mb, even on a 1Gb machine with hardly anything running. Specifying for example -Xms256m -Xmx512m results in following error:
    Error occurred during initialization of VM
    Could not reserve enough space for object heap
    Could not create the Java virtual machine.
    No problem at all with a JVMPI agent.
    Anyone any ideas?
    Thanks,
    Luc

    JVM TI agent libraries are loaded very early in the startup and before the java heap is reserved. JVMPI agents, on the other hand, are loaded much later in the startup. You didn't mention which operating system this is but I assume it's Windows. If so, then you may need need to rebase the agent DLL to allow the java heap be reserved.

  • Application and jdi/jvmti agent in single vm?

    We're building a suite of monitoring tools that will help us inspect and manage our enterprise-class app. We currently have working an instrumenting interface (via mbeans) that uses javassist to instrument bytecode; this tool runs as an agent within the app's vm using the java.lang.instrument package -- no native code involved. The next aspect of the tool suite is a more sophisticated "inspector" that will offer debugging-like facilities: method tracing, local variable inspection, thread inspection, etc.
    We prototyped a version using jdi and that works fine if the agent does not run in the same vm as the app. However, setting things up so that the JDI agent does run in the app's vm does not work -- the entire vm (app, agent) hang after a call to VirtualMachine.suspend().
    Intuitively, I think I knew this would happen but wanted to confirm it here. I have two questions:
    1. Is it possible for a JDI-based agent to run in the same vm as a monitored app?
    2. If not (1), and we write our agent in C, will the RunAgentThread() jvmti api allow us to run the inspector in the app's vm?
    Thanks for your help.

    JDI wasn't intended to be used to debug the same process in which the JDI client is running. We haven't tested that.
    However, it is an interesting question and it seems that theoretically, if you are very careful, you might be able to do
    a limited amount of debugging.
    I gave it a try. My test program is launched with
    java -agentlib:jdwp=transport=dt_socket,address=60000,server=y,suspend=n
    The program starts a thread (named by default Thread-0) and then uses the SocketAttachingConnector
    to attach to 60000. After it gets back a VirtualMachine object, it does
    VirtualMachine.allThreads()
    and prints the result:
    instance of java.lang.Thread(name='Thread-1', id=66),
    instance of java.lang.Thread(name='JDI Target VM Interface', id=4),
    instance of java.lang.Thread(name='JDI Internal Event Handler', id=7),
    instance of java.lang.Thread(name='Thread-0', id=69),
    instance of java.lang.Thread(name='Signal Dispatcher', id=70),
    instance of java.lang.ref.Finalizer$FinalizerThread(name='Finalizer', id=71),
    instance of java.lang.ref.Reference$ReferenceHandler(name='Reference Handler', id=72),
    instance of java.lang.Thread(name='main', id=1)
    So, this method worked. It sounds like you have basically gotten this far since you said your entire
    app hangs after a call to VirutalMachine.suspend(). This hang is to be expected since you are suspending
    'yourself'. You have to be very careful to not do this. EG, don't set a SUSPEND_ALL breakpoint at a location
    which your 'debugger' will execute. There might be other pitfalls too that make this idea impractical.
    But, if you are careful, eg, restrict actions to threads in the part of your app that you want to 'monitor', you
    might be able to do something useful.
    Let us know how it goes.

  • JvmTI agent problem

    My jvm agent as follows:
    JNIEXPORT jint JNICALL
    Agent_OnLoad(JavaVM *jvm, char *options, void *reserved)
      // simple code
    printf("Test for jvm agent \n");
    return 0;
    JNIEXPORT void JNICALL
    Agent_OnUnload(JavaVM *vm)
    // nothing to do.
    2. and my makefile:
    AVA_HOME =C:\Dev_Tools\Java\jdk1.6.0_26
    JDK_HOME = C:\Dev_Tools\Java\jdk1.6.0_26
    C = gcc
    CXX = gcc
    OPT = -O2
    DEBUG = -g
    INCDIR = -I.
    LIBDIR = -L.
    CFLAGS = -fno-strict-aliasing -fPIC -fno-omit-frame-pointer -W -Wall -DSC_INCLUDE_FX -m32 -static-libgcc  -kill-at
    LINKFLAGS = -D_JNI_IMPLEMENTATION_ -fno-omit-frame-pointer -m32 -static-libgcc -shared
    JDK_INCL = -I$(JDK_HOME)/include -I$(JDK_HOME)/include/win32
    DYLIB_FLAGS = -dynamiclib -flat_namespace -undefined suppress
    CXXCOMPILE = $(CXX) -c $(CFLAGS) $(INCDIR) $(LIBDIR) $(JDK_INCL)
    CXXLINK = $(CXX) $(LINKFLAGS) $(LIBDIR)
    LIBS = -lm
    EXEC = TraceAgent.dll
    HEADS =
    IMPLS = $(HEADS:.h=.c)
    SRCS = main.c $(IMPLS)
    OBJS = $(SRCS:.c=.o)
    COMMON =
    all: $(EXEC)
    $(EXEC): $(OBJS)
      $(CXXLINK) -o $(EXEC) $(OBJS) $(LIBS)
    main.o: main.c $(HEADS) $(COMMON)
      $(CXXCOMPILE) -o $@ $<
    %.o: %.c %.h $(COMMON)
      $(CXXCOMPILE) -o $@ $<
    clean:
      rm $(EXEC) $(OBJS) *~
    cmd> make all
    and gen a dll file named : TraceAgent.dll
    And I copy this dll file to my fold
    java code:  java -agentpath:E:\moaworksp\JvmTest\bin\TraceAgent.dll com.AgentSample
    but eror as follows:
    Error occurred during initialization of VM
    Could not find Agent_OnLoad function in the agent library: E:\moaworksp\JvmTest\bin\TraceAgent.dll
    How can I do?
    By the way ,my Java source file AgentSamole is a simple main java for test.
    Thanks in advance.

    I got it.
    Pls use visual C++ compile the code , and gen the DLL file ,and this will be  run OK.

  • Update: Application and jdi/jvmti agent in single vm?

    So far, using JDI as a "same-process" interface to the VM (i.e. "debugger" and "debuggee" in the same vm) seems to be working. Thus far we have MethodEnter and MethodLeave events flowing, along with capture of information available from these events. Our next goal is to get BreakpointEvents going so we can capture local variable information at certain points in a method.
    Pretty cool...
    -- david

    Interesting - I don't know of anyone who has done this before.
    Thanks for the update.

  • Could not find agent library on the library path or in the local directory

    Hi all,
    I'm trying to write a jvmti agent that write any information in a mysql db. I've written a simple agent that work correctly and now I'll try to insert the mysqlpp library in my agent:
    1) I've added #include <mysql++.h>
    2) and I've added mysqlpp::Connection      conn(false); (global variable)
    I've modify my Makefile and the compiler and linker work correctly but when I test the agent the VM says "Could not find agent library on the library path or in the local directory"
    Below the code:
    -- analizer.cpp --
    #include <iostream>
    #include <stdlib.h>
    #include <jni.h>
    #include <string.h>
    #include <jvmti.h>
    #include <mysql++.h>
    #include "ClassDetail.cpp"
    #define CFN(ptr) checkForNull(ptr, __FILE__, __LINE__);
    static void checkForNull(void *ptr, const char* file, int line) {
        if(ptr == NULL) {
            std::cerr << "ERROR : NullPointerException in " << file <<":"<< line<<"\n";
            abort();
    static char* getErrorName(jvmtiEnv *jvmti, jvmtiError err) {
        jvmtiError errNum;
        char *name;
        errNum = jvmti->GetErrorName(err, &name);
        if( errNum != JVMTI_ERROR_NONE) {
            std::cerr << "ERROR : errore nel reprire l'error name " << errNum;
            abort();
        return name;
    #define CJVMTIE(jvmti, err) checkJvmtiError(jvmti, err, __FILE__, __LINE__);
    static void checkJvmtiError(jvmtiEnv *jvmti, jvmtiError err, const char* file, int line) {
        if(err != JVMTI_ERROR_NONE) {
            char *name = getErrorName(jvmti, err);
            std::cout << "ERROR : JVMTI error " << err << "("<<name<<") in "<<file<<":"<<line;
            abort();
    static void vmInit(jvmtiEnv *jvmti_env, JNIEnv *jni, jthread thread);
    static void startGCEvent(jvmtiEnv *jvmti_env);
    static void finishGCEvent(jvmtiEnv *jvmti_env);
    static jvmtiIterationControl JNICALL heapObject(jlong tag, jlong size, jlong* tag_ptr, void* userData);
    jrawMonitorID           lock;
    int                     gc_count;
    long                    heapSize = 0;
    bool                    heapCheck = false;
    mysqlpp::Connection      conn(false);
    JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *vm, char *options, void *reserved) {
        std::cout<<"OnLoad\n";
        jint                rc;
        jvmtiEnv            *jvmti = NULL;
        jvmtiError          err;
        jvmtiCapabilities   capabilities;
        jvmtiEventCallbacks callbacks;
        rc = vm->GetEnv((void **)&jvmti, JVMTI_VERSION);
        if( rc != JNI_OK) {
            std::cout << "ERROR : Errore nell'ottenere 'environment rc = " << rc;
            return -1;
        CFN(jvmti);
        err = jvmti->GetCapabilities(&capabilities);
        CJVMTIE(jvmti, err);
        CFN(&capabilities);
        capabilities.can_generate_garbage_collection_events = true;
        capabilities.can_tag_objects = true;
        CJVMTIE(jvmti, jvmti->AddCapabilities(&capabilities));
        CJVMTIE(jvmti, jvmti->CreateRawMonitor("agent lock", &lock));
        callbacks.VMInit = &vmInit;
        callbacks.GarbageCollectionStart = &startGCEvent;
        callbacks.GarbageCollectionFinish = &finishGCEvent;
        CJVMTIE(jvmti, jvmti->SetEventCallbacks(&callbacks, sizeof(callbacks)));
        jvmti->SetEventNotificationMode(JVMTI_ENABLE, JVMTI_EVENT_VM_INIT, NULL);
        jvmti->SetEventNotificationMode(JVMTI_ENABLE, JVMTI_EVENT_GARBAGE_COLLECTION_START, NULL);
        jvmti->SetEventNotificationMode(JVMTI_ENABLE, JVMTI_EVENT_GARBAGE_COLLECTION_FINISH, NULL);
        return 0;
    JNIEXPORT void JNICALL Agent_OnUnload(JavaVM *vm)
        std::cout<<"OnUnload\n";
    static void JNICALL worker(jvmtiEnv *jvmti, JNIEnv *jni, void *p) {
        std::cout << "worker";
        for (;;) {
            CJVMTIE(jvmti, jvmti->RawMonitorEnter(lock));
            while (gc_count == 0) {
                CJVMTIE(jvmti, jvmti->RawMonitorWait(lock, 0));
                jvmti->RawMonitorExit(lock);
            gc_count = 0;
            jvmti->RawMonitorExit(lock);
            /* Perform arbitrary JVMTI/JNI work here to do post-GC cleanup */
            if(!heapCheck) {
                heapCheck = true;
                jint        count;
                jclass    *classes;
                CJVMTIE(jvmti, jvmti->GetLoadedClasses(&count, &classes));
                ClassDetail *details = (ClassDetail*)calloc(sizeof(ClassDetail), count);
                for(int i = 0; i < count; i++) {
                    char *sig;
                    CJVMTIE(jvmti, jvmti->GetClassSignature(classes, &sig, NULL));
    CFN(sig);
    details[i] = ClassDetail(strdup(sig));
    CJVMTIE(jvmti, jvmti->SetTag(classes[i], (jlong)(ptrdiff_t)(void*) (&details[i])));
    heapSize = 0;
    CJVMTIE(jvmti, jvmti->IterateOverHeap(JVMTI_HEAP_OBJECT_EITHER, &heapObject, NULL));
    std::cout << "Heap Memory : " << heapSize<<'\n';
    heapCheck = false;
    static void vmInit(jvmtiEnv jvmti, JNIEnv jni, jthread thread) {
    jclass clazz = jni->FindClass("java/lang/Thread");
    jmethodID mid = jni->GetMethodID(clazz, "<init>", "()V");
    jthread _thread = jni->NewObject(clazz, mid);
    CJVMTIE(jvmti, jvmti->RunAgentThread(_thread, &worker, NULL, JVMTI_THREAD_MAX_PRIORITY));
    static void startGCEvent(jvmtiEnv *jvmti) {
    static void finishGCEvent(jvmtiEnv *jvmti) {
    std::cout << "****************************************************************** <<<<<<<<<<<< Finito gc\n";
    gc_count++;
    CJVMTIE(jvmti,jvmti->RawMonitorEnter(lock));
    CJVMTIE(jvmti,jvmti->RawMonitorNotify(lock));
    CJVMTIE(jvmti,jvmti->RawMonitorExit(lock));
    static jvmtiIterationControl JNICALL heapObject(jlong tag, jlong size, jlong* tag_ptr, void* userData) {
    if(tag != (jlong) 0) {
    std::cout << "Tag : " << tag<< '\n';
    ClassDetail detail = (ClassDetail) (void*) (ptrdiff_t) tag;
    char *sig = detail->getSignature();
    std::cout << "Class " << sig << " size : " << size<<'\n';
    heapSize += size;
    return JVMTI_ITERATION_CONTINUE;
    -- ClassDetail.cpp --class ClassDetail {
    private:
    char* signature;
    public:
    ClassDetail(char* signature){
    this->signature = signature;
    char* getSignature() { return this->signature;}
    --Makefile--########################################################################
    # Sample GNU Makefile for building JVMTI Demo waiters
    # Example uses:
    # gnumake JDK=<java_home> OSNAME=solaris [OPT=true] [LIBARCH=sparc]
    # gnumake JDK=<java_home> OSNAME=solaris [OPT=true] [LIBARCH=sparcv9]
    # gnumake JDK=<java_home> OSNAME=linux [OPT=true]
    # gnumake JDK=<java_home> OSNAME=win32 [OPT=true]
    # Source lists
    LIBNAME=analizer
    SOURCES=analizer.cpp
    MYSQLPP_LIB_PATH=/home/claudio/Desktop/Scaricati2/mysql++-3.0.6/mysqlpp_lib/lib/
    MYSQLPP_HEADER_PATH=/home/claudio/Desktop/Scaricati2/mysql++-3.0.6/mysqlpp_lib/include/mysql++
    MYSQL_PATH=/opt/mysql-5.0.51a-linux-i686-icc-glibc23
    # Solaris Sun C Compiler Version 5.5
    ifeq ($(OSNAME), solaris)
    # Tell gnumake which compilers to use
    CC=cc
    CXX=CC
    # Sun Solaris Compiler options needed
    COMMON_FLAGS=-mt -KPIC
    # Check LIBARCH for any special compiler options
    LIBARCH=$(shell uname -p)
    ifeq ($(LIBARCH), sparc)
    COMMON_FLAGS+=-xarch=v8 -xregs=no%appl
    endif
    ifeq ($(LIBARCH), sparcv9)
    COMMON_FLAGS+=-xarch=v9 -xregs=no%appl
    endif
    ifeq ($(OPT), true)
    CXXFLAGS=-xO2 $(COMMON_FLAGS)
    else
    CXXFLAGS=-g $(COMMON_FLAGS)
    endif
    # Object files needed to create library
    OBJECTS=$(SOURCES:%.cpp=%.o)
    # Library name and options needed to build it
    LIBRARY=lib$(LIBNAME).so
    LDFLAGS=-z defs -ztext
    # Libraries we are dependent on
    LIBRARIES= -lc
    # Building a shared library
    LINK_SHARED=$(LINK.cc) -G -o $@
    endif
    # Linux GNU C Compiler
    ifeq ($(OSNAME), linux)
    # GNU Compiler options needed to build it
    COMMON_FLAGS=-fno-strict-aliasing -fPIC -fno-omit-frame-pointer
    # Options that help find errors
    COMMON_FLAGS+= -W -Wall -Wno-unused -Wno-parentheses
    ifeq ($(OPT), true)
    CXXFLAGS=-O2 $(COMMON_FLAGS)
    else
    CXXFLAGS=-g $(COMMON_FLAGS)
    endif
    # Object files needed to create library
    OBJECTS=$(SOURCES:%.cpp=%.o)
    # Library name and options needed to build it
    LIBRARY=lib$(LIBNAME).so
    LDFLAGS=-Wl,-soname=$(LIBRARY) -static-libgcc -mimpure-text
    LDFLAGS += -lmysqlpp
    # Libraries we are dependent on
    LIBRARIES=
    # Building a shared library
    LINK_SHARED=$(LINK.cc) -shared -o $@
    endif
    # Windows Microsoft C/C++ Optimizing Compiler Version 12
    ifeq ($(OSNAME), win32)
    CC=cl
    # Compiler options needed to build it
    COMMON_FLAGS=-Gy -DWIN32
    # Options that help find errors
    COMMON_FLAGS+=-W0 -WX
    ifeq ($(OPT), true)
    CXXFLAGS= -Ox -Op -Zi $(COMMON_FLAGS)
    else
    CXXFLAGS= -Od -Zi $(COMMON_FLAGS)
    endif
    # Object files needed to create library
    OBJECTS=$(SOURCES:%.cpp=%.obj)
    # Library name and options needed to build it
    LIBRARY=$(LIBNAME).dll
    LDFLAGS=
    # Libraries we are dependent on
    LIBRARIES=
    # Building a shared library
    LINK_SHARED=link -dll -out:$@
    endif
    # Common -I options
    CXXFLAGS += -I.
    #CXXFLAGS += -I../agent_util
    CXXFLAGS += -I$(JDK)/include -I$(JDK)/include/$(OSNAME)
    CXXFLAGS += -I$(MYSQLPP_HEADER_PATH) -I$(MYSQL_PATH)/include -L$(MYSQLPP_LIB_PATH) -I$(MYSQLPP_LIB_PATH)
    # Default rule
    all: $(LIBRARY)
    # Build native library
    $(LIBRARY): $(OBJECTS)
         $(LINK_SHARED) $(OBJECTS) $(LIBRARIES)
    # Cleanup the built bits
    clean:
         rm -f $(LIBRARY) $(OBJECTS)
    # Simple tester
    test: all
         LD_LIBRARY_PATH=`pwd` $(JDK)/bin/java -agentlib:$(LIBNAME) -jar jvmti-test.jar
         #LD_LIBRARY_PATH=`pwd` $(JDK)/bin/java -agentlib:$(LIBNAME) -version
    # Compilation rule only needed on Windows
    ifeq ($(OSNAME), win32)
    %.obj: %.cpp
         $(COMPILE.cc) $<
    endif

    Did you make sure your library (call it x) starts is named libx.so (atleast, on linux, possibly libx.dll on windows, not sure)? It will not load otherwise, and you must specify -agentlib:x (rather than saying libx.so). Yes, it is "funny" how it gives the same uninformative error message for a wide variety of errors. It will also give you this same error message if there are still unresolved symbols upon loading your library (which would be my second guess).

  • Communicating with the TI agent

    Hi,
    I am new to the JVMTI world and I seem to be missing something. The examples provided with the JDK are commandline driven with postmortem analysis. My project needs to interact with the agent from the gui but I am not sure how.
    My java tool is launching a target virtual machine using the JDI LaunchingConnector. This target vm is launched with a JVMTI agent. The state of the agent needs to change while the target is running (changes are based on the user's input). What is the best way for the java tool to communicate directly with the TI agent running in the target vm?
    My first thought was to set up a socket connection between the agent and the tool but is that risky? Is there a better or preferred way?
    Any help or pointers to examples would be greatly appreciated. I want to make sure I am heading in the right direction.
    Thank you,
    Maryann

    The original post isn't very clear. It sounds like you are using JDI to launch the target VM, in which case the JDI implementation will manage the connection to the target VM. You also say the target VM is launching a JVM TI agent. In that case, you will need to code the transport yourself.

  • How can i use the jvmti function GetLocalVariable

    can I get the example of using GetLocalVariable?
    (GetLocalObject, GetLocalInt, GetLocalFloat, GetLocalDouble)
    and if get the Value of Object, how can i print the object?
    last, in the java program, can i call the function of jvmti agent?
    I'm studying the exmaple of mtrace(demo of jvmti), I can understand how the jvmti agent works. expecially mtrace.java part. how it can connects java program and jvmti agent.
    if anyone know please let me know. thank you.

    Sorry for the slow reply, this wasn't a posting area I normally look for.
    First you need to use GetLocalVariableTable for a given method. That gives you the variable name to slot mapping (slot is kinda like an offset in the stack for an active stack frame). Then you can use GetLocalVariable to get a value, but you need to know which frame (depth), the topmost or active frame would be 0, and you need to know what thread, thread==NULL means the current thread. You'll need to parse the signature of the variable to know what it's type is and size is before you'd be able to make sense out of the value you get back, which I think is a union of all possible values.
    Hope this helps.
    -kto

  • Could not find agent library in absolute path

    Hi,
    I have a JVMTI agent which works on windows that I am trying to port to linux.
    I have compiled to code on Ubuntu 10.04 using Eclipse and have created shared library .so file.
    When I try to run an application with the agentpath argument, I get the error: "Could not find agent library in absolute path"
    When trying to run the mtrace sample from the java JDK, it works fine.
    My Java version is:
    java version "1.6.0_20"
    Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
    Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode, sharing)
    I also tried running nm | grep Agent_OnLoad and got the following:
    00029220 T Agent_OnLoad
    00036230 b ZGVZ12AgentOnLoadE4data
    00030720 r ZZ12AgentOnLoadE19__PRETTY_FUNCTION__
    00036240 b ZZ12AgentOnLoadE4data
    My agent references several libraries such as boost asio and log4cxx could it be related somehow to these?
    I think it might be some sort of compilation issue because on windows it works fine.
    Thanks

    I managed to solve my problem.
    It turned out that the error was caused by missing referenced libraries that were not linked in to my so file.
    Once I added all of the required libraries, the agent started working.

  • JVMTI : AgentSetEventNotificationMode Causes Troubles in Lotus Notes

    Hi Everybody
    I have a JVMTI agent that i used to profile many java application ( Eclipse, Notes ...)
    I discover that I have some troubles with Lotus Notes Release 8.5.2FP4 on WIN7 64x
    (troubles like same time sigin windows don't open , contact window empty and it display nothing ...)
    when trying to investigate it a find that the problem occured when I call JVMTI method SetEventNotificationMode with JVMTI_EVENT_CLASS_FILE_LOAD_HOOK as parameters
    event with an empty callback I have always problem but only with notes
    in Trace log I found message like :
    *"An error occurred when activating automatic grouping com.ibm.rcp.aaf.startup (944).*
    *Caused by: java.lang.NoClassDefFoundError: com / ibm / icu / util / GregorianCalendar ... "*
    *"Errors when calling the plug-in code: com.ibm.rcp.personality.framework"*
    *"The plug-in com.ibm.rcp.aaf.startup failed to load the class com.ibm.rcp.aaf.startup.Startup."*
    when I try to desable this Event (JVMTI_EVENT_CLASS_FILE_LOAD_HOOK ) evry lotus notes fonctionnalities works well
    Any Idea ?
    Thanks a lot

    What version of Notes do you have? I get a message saying "Domino Web Access has not been certified to work with this browser" and I can choose one of:
    Try Domino Web Access anyway
    Use Lotus iNotes ultralite mode
    Use WebMail
    Logout
    I try Domino Web Access anyway
    As Mike says, it is pretty much useless with a touch screen. I can preview a message, I can create a new message, but I can't type in the body of the new message.
    I can switch to Lite, but the text is so small I can't read it. Clicking New doesn't seem to do anything here.
    I start over. Apparently that Lite mode isn't the same as Ultralite. The Ultralite mode seems to work fine and even has a distinct iPhone-esque look to it.
    The last option, just WebMail looks like a real old, rude and crude webmail version done by somebody's kid that is good with computers.
    So, see if you have access to the Ultralite mode. That one is definitely the best. Our Lotus Notes servers also have IMAP servers as well. I tend to use those instead of an actual Lotus client.

  • Agents for 64 bit on windows

    Hi all,
    Is there a way to invoke a 32 bit JVMTI agents from a 64 bit JVM on windows?
    If not, is there a way to make the JAVA_TOOL_OPTIONS apply to 32 bit JVMs only?

    Unfortunately not so this means you'll need a wrapper script to select the agent library that matches the architecture.

  • WebLogic 9.0 with Sun JDK and JVMTI

    WebLogic 9.0 runs a JVMTI agent fine with JRockit, but when using the BEA supplied Sun JVM it gives following error "Could not reserve enough space for object heap". I tried all kind of settings for Xms, Xmx, PermSize and MaxPermSize, but no luck. Anyone any suggestions?
    Thanks,
    Luc

    WebLogic 9.0 runs a JVMTI agent fine with JRockit, but when using the BEA supplied Sun JVM it gives following error "Could not reserve enough space for object heap". I tried all kind of settings for Xms, Xmx, PermSize and MaxPermSize, but no luck. Anyone any suggestions?
    Thanks,
    Luc

  • Starting JVM Tool Interface agents in the VM during live phase

    The JVM Tool Interface(JVMTI) specification says that the JVMTI agents can be started in the VM during live phase but they havent mentioned how it can be done. Has anyone tried this before or got any hints on how to do it?

    Hi,
    Erika, first and foremost please try logging into SQLPlus and unlock the ddic login.
    Following is the procedure, check what is the username for shadow instance user, whether it is SAPR3SHD or SAP<SID>SHD. Use whichever applicable
    unlock them throught OS/DB level :
    example for Oracle as <sid>adm :
    svrmgrl
    connect internal
    update sapr3shd.usr02 set uflag=0 where bname='ddic' and mandt='000';
    commit;
    exit
    Note about uflag values :
    0 User not locked
    32 (Hex 20) Locked by central administrator of CUA
    64 (Hex 40) Locked by administrator
    128 (Hex 80) Locked due to incorrect messages
    Now once you have unlocked the user. stop the shadow instance and start it once again. Now try to login to the shadow instance using ddic user and password.
    If you are able to then try repeating the START_SHDI_FIRST phase and check.
    If it doesnt go through and the error comes again. check whether you have entry for sapgw09 in /etc/services file.
    Also you can check by logging in the original SAP system in transaction SM59, whether the ABAP connection for Shadow instance is working fine or not.
    If this info is informative and helpful in resoving the error do reward points
    Regards,
    Suhas
    Edited by: Suhas Ajgaonkar on Mar 14, 2008 12:02 PM

  • JVMTI Heap Measurement vs. external measurement

    Hello,
    I am about to do some memory distribution analysis of the content of a java heap. In a first step I build an JVMTI agent which writes all reachable objects with their size to a file. For each reference caught by IterateOverReachableObjects() I write refererer and referee to another file too.
    First the sum of all object sizes is is around 130 % of the heap size reported by jstat and Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory() Both report exactly the same.
    Taking the sum of all objects only found as referees is the references-file is little smaller, but none the less significantly larger than reported by the two named possibilities.
    Whats the reason for this? What is wrong on my approach? Is it what the JVMTI reference says? That :
    "... This size is an implementation-specific approximation of the amount of storage consumed by this object. It may include some or all of the object's overhead, and thus is useful for comparison within an implementation but not between implementations. The estimate may change during a single invocation of the JVM."
    Robert

    Here are a few more comments which might be helpful:L
    1. IterateOverReachableObject didn't report all references to resolved entries in the constant pool in 5.0. I don't have the bugID at hand but it is a known issue that was fixed in 6.0.
    2. IterateOverHeap doesn't report internal objects but there are some objects in the perm generation (such as interned Strings) that may not be reachable with IterateOverReachableObjects. The constant pool issue in #1 is part of the same issue.
    3. IterateOverReachableObjects skips over classes which aren't linked. I believe you will see these classss with IterateOverHeap as does a linear iteration over the heap and reports all (non-internal) objects.
    4. For the most part the classes and counts for +PrintClassHistogram should be the same as what you see with IterateOverHeap.  There are a few differences such as internal objects but there are a few others that need a more detailed explanation - I'll post a reply on that when I get time.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       

Maybe you are looking for

  • Pages 4.2 no Small Caps can be activated

    I use a lot Pages for texts, flyers and posters. There seems to be a serious bug within Pages 4.2. if you open the typo panel and activate the Small Caps feature or Opentype fonts they though they can be clicked Pages does not transform the marked te

  • Using a shared internet connection?

    my workplace doesn't have a wireless network, but i can plug in my macbook and was hoping to use it as a wireless network for my ipod touch. i enabled a shared ethernet connection via the airport on my mac, but my ipod touch doesn't find it as a wire

  • HP Scanjet 200 Problems with hpqkyggrp.exe

    Good day I have a new (6 December 2014) HP Scanjet 200.  I have a Dell Latitude using Windows 8.1 and it is a 64 bit OS. I installed the software from the disk.  The two desktop shortcuts (HP Scanning and HP Copy) do not work as they both point to hp

  • Work process is in Run status , unable to login to SAP

    Dear All, Suddenly my Dev server went down, Workprocess turn to status Run , and dispatcher status says,Running But Dialog Queue Stand Still ; J2EE : sysnchronizing Binary. It is unable to attach the database, Database displays connected. Please see

  • User Exit to change the Net price in the Billing document

    Hi, We have one billing document used for three countries My requirement is , for worng price, user has to chaange the Price manually in the Billing document. I cannt maintain the copy control setting from the Delivery document to Billing with Pricin