7 Replies Latest reply: Apr 19, 2012 10:52 AM by Arunbodap-Oracle RSS

    One of the managed Server utilizing more space. ??

    JZWL
      I have a scenario in which, one of the Managed servers (2 managed servers on different machines ) is utilizing more sapce ( physically : the size od the server/data folder is increasing every minute ) for the same application deployed on to the cluster having only 2 servers on two unix boxes.

      Using weblogic server WebLogic Server Version: 10.3.0.0
      2 manged servers in cluster across 2 different machines

      Please provide some hint on the possible reasons that would invite this kind of server behavior. also if possible some suggestions on trouble shoot and solutions.

      please find the thread stack for the server which has this issue.

      "Main Thread" waiting for lock weblogic.t3.srvr.T3Srvr@100a44b4 WAITING

           java.lang.Object.wait(Native Method)

           java.lang.Object.wait(Object.java:485)

           weblogic.t3.srvr.T3Srvr.waitForDeath(T3Srvr.java:811)

           weblogic.t3.srvr.T3Srvr.run(T3Srvr.java:459)

           weblogic.Server.main(Server.java:67)

      "(Signal Handler)" RUNNABLE

      null

      "(OC Main Thread)" RUNNABLE

      null

      "(Code Generation Thread 1)" RUNNABLE

      null

      "(Code Optimization Thread 1)" RUNNABLE

      null

      "(VM Periodic Task)" RUNNABLE

      null

      "Finalizer" RUNNABLE

           jrockit.memory.Finalizer.waitForFinalizees(Native Method)

           jrockit.memory.Finalizer.access$700(Finalizer.java:12)

           jrockit.memory.Finalizer$4.run(Finalizer.java:189)

           java.lang.Thread.run(Thread.java:619)

      "Reference Handler" RUNNABLE

           java.lang.ref.Reference.waitForActivatedQueue(Native Method)

           java.lang.ref.Reference.access$100(Reference.java:11)

           java.lang.ref.Reference$ReferenceHandler.run(Reference.java:82)

      "(Sensor Event Thread)" RUNNABLE

      null

      "shared InfrequentEventScheduler" waiting for lock com.mercury.diagnostics.common.util.InfrequentEventScheduler$BackgroundThread@1015f041 TIMED_WAITING

           java.lang.Object.wait(Native Method)

           com.mercury.diagnostics.common.util.InfrequentEventScheduler$BackgroundThread.run(InfrequentEventScheduler.java:741)

      "metric-sampler" TIMED_WAITING

           java.lang.Thread.sleep(Native Method)

           com.mercury.diagnostics.common.modules.monitoring.Monitor$MetricSampler.implRun(Monitor.java:404)

           com.mercury.diagnostics.common.util.StateRunnable.run(StateRunnable.java:136)

           java.lang.Thread.run(Thread.java:619)

      "Buffer flushing thread" waiting for lock java.lang.Object@1015f1ff TIMED_WAITING

           java.lang.Object.wait(Native Method)

           com.mercury.opal.capture.util.CaptureBuffer.run(CaptureBuffer.java:555)

           java.lang.Thread.run(Thread.java:619)

      "AS400 Read Daemon-30" RUNNABLE native

           jrockit.net.SocketNativeIO.readBytesPinned(Native Method)

           jrockit.net.SocketNativeIO.socketRead(SocketNativeIO.java:32)

           java.net.SocketInputStream.socketRead0(SocketInputStream.java)

           java.net.SocketInputStream.read(SocketInputStream.java:129)

           com.ibm.as400.access.DataStream.readFromStream(DataStream.java:48)

           com.ibm.as400.access.ClientAccessDataStream.construct(ClientAccessDataStream.java:46)

           com.ibm.as400.access.AS400ThreadedServer.run(AS400ThreadedServer.java:321)

           java.lang.Thread.run(Thread.java:619)

      "ServerCommunication" waiting for lock com.mercury.diagnostics.common.util.InfrequentEventScheduler$BackgroundThread@1015f07b TIMED_WAITING

           java.lang.Object.wait(Native Method)

           com.mercury.diagnostics.common.util.InfrequentEventScheduler$BackgroundThread.run(InfrequentEventScheduler.java:741)

      "LWMD processor" waiting for lock com.mercury.opal.capture.LWMDCaptureAgent@1011ba2d TIMED_WAITING

           java.lang.Object.wait(Native Method)

           com.mercury.opal.capture.LWMDCaptureAgent.run(LWMDCaptureAgent.java:814)

           java.lang.Thread.run(Thread.java:619)

      "CLP timer" TIMED_WAITING

           java.lang.Thread.sleep(Native Method)

           com.mercury.opal.capture.CLPCaptureAgent$CLPTimer.run(CLPCaptureAgent.java:948)

      "CLP data reporter" waiting for lock com.mercury.opal.capture.CLPCaptureAgent@1015f259 TIMED_WAITING

           java.lang.Object.wait(Native Method)

           com.mercury.opal.capture.CLPCaptureAgent.run(CLPCaptureAgent.java:433)

           java.lang.Thread.run(Thread.java:619)

      "Stack Trace Sampler" TIMED_WAITING

           java.lang.Thread.sleep(Native Method)

           com.mercury.opal.capture.ThreadSamplingAgent$Sampler.run(ThreadSamplingAgent.java:247)

           java.lang.Thread.run(Thread.java:619)

      "Metrics Collection" waiting for lock java.lang.Object@1015f2aa TIMED_WAITING

           java.lang.Object.wait(Native Method)

           com.mercury.diagnostics.capture.metrics.CollectorAgent.run(CollectorAgent.java:659)

           java.lang.Thread.run(Thread.java:619)

      "VM JFR Buffer Thread" RUNNABLE native

      null

      "AS400 Read Daemon-31" RUNNABLE native

           jrockit.net.SocketNativeIO.readBytesPinned(Native Method)

           jrockit.net.SocketNativeIO.socketRead(SocketNativeIO.java:32)

           java.net.SocketInputStream.socketRead0(SocketInputStream.java)

           java.net.SocketInputStream.read(SocketInputStream.java:129)

           com.ibm.as400.access.DataStream.readFromStream(DataStream.java:48)

           com.ibm.as400.access.ClientAccessDataStream.construct(ClientAccessDataStream.java:46)

           com.ibm.as400.access.AS400ThreadedServer.run(AS400ThreadedServer.java:321)

           java.lang.Thread.run(Thread.java:619)

      "SessionScavenger" TIMED_WAITING

           java.lang.Thread.sleep(Native Method)

           org.mortbay.jetty.servlet.AbstractSessionManager$SessionScavenger.run(AbstractSessionManager.java:481)

      "SessionScavenger" TIMED_WAITING

           java.lang.Thread.sleep(Native Method)

           org.mortbay.jetty.servlet.AbstractSessionManager$SessionScavenger.run(AbstractSessionManager.java:481)

      "SessionScavenger" TIMED_WAITING

           java.lang.Thread.sleep(Native Method)

           org.mortbay.jetty.servlet.AbstractSessionManager$SessionScavenger.run(AbstractSessionManager.java:481)

      "Acceptor ServerSocket[addr=/0.0.0.0,port=0,localport=35002]" RUNNABLE native

           java.net.PlainSocketImpl.socketAccept(Native Method)

           java.net.PlainSocketImpl.accept(PlainSocketImpl.java:390)

           java.net.ServerSocket.implAccept(ServerSocket.java:453)

           java.net.ServerSocket.accept(ServerSocket.java:421)

           org.mortbay.util.ThreadedServer.acceptSocket(ThreadedServer.java:391)

           org.mortbay.util.ThreadedServer$Acceptor.run(ThreadedServer.java:587)

      "AS400 Read Daemon-32" RUNNABLE native

           jrockit.net.SocketNativeIO.readBytesPinned(Native Method)

           jrockit.net.SocketNativeIO.socketRead(SocketNativeIO.java:32)

           java.net.SocketInputStream.socketRead0(SocketInputStream.java)

           java.net.SocketInputStream.read(SocketInputStream.java:129)

           com.ibm.as400.access.DataStream.readFromStream(DataStream.java:48)

           com.ibm.as400.access.ClientAccessDataStream.construct(ClientAccessDataStream.java:46)

           com.ibm.as400.access.AS400ThreadedServer.run(AS400ThreadedServer.java:321)

           java.lang.Thread.run(Thread.java:619)

      "Timer-0" waiting for lock java.util.TaskQueue@1015f34c WAITING

           java.lang.Object.wait(Object.java:485)

           java.util.TimerThread.mainLoop(Timer.java:483)

           java.util.TimerThread.run(Timer.java:462)

      "JMAPI event thread" RUNNABLE native

      null

      "Timer-1" waiting for lock java.util.TaskQueue@102338ef TIMED_WAITING

           java.lang.Object.wait(Native Method)

           java.util.TimerThread.mainLoop(Timer.java:509)

           java.util.TimerThread.run(Timer.java:462)

      "[STANDBY] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'" waiting for lock weblogic.work.ExecuteThread@11443a11 WAITING

           java.lang.Object.wait(Object.java:485)

           weblogic.work.ExecuteThread.waitForRequest(ExecuteThread.java:157)

           weblogic.work.ExecuteThread.run(ExecuteThread.java:178)

      "weblogic.time.TimeEventGenerator" waiting for lock weblogic.time.common.internal.TimeTable@10238ce2 TIMED_WAITING

           java.lang.Object.wait(Native Method)

           weblogic.time.common.internal.TimeTable.snooze(TimeTable.java:286)

           weblogic.time.common.internal.TimeEventGenerator.run(TimeEventGenerator.java:117)

           java.lang.Thread.run(Thread.java:619)

      "weblogic.timers.TimerThread" waiting for lock weblogic.timers.internal.TimerThread@1023bce2 TIMED_WAITING

           java.lang.Object.wait(Native Method)

           weblogic.timers.internal.TimerThread$Thread.run(TimerThread.java:267)

      "[ACTIVE] ExecuteThread: '1' for queue: 'weblogic.kernel.Default (self-tuning)'" RUNNABLE

           java.util.ArrayList.<init>(ArrayList.java:112)

           java.util.ArrayList.<init>(ArrayList.java:119)

           weblogic.store.internal.PersistentStoreTransactionImpl.<init>(PersistentStoreTransactionImpl.java:20)

           weblogic.store.internal.PersistentStoreImpl.begin(PersistentStoreImpl.java:302)

           weblogic.diagnostics.archive.wlstore.PersistentStoreDataArchive.readRecord(PersistentStoreDataArchive.java:688)

           weblogic.diagnostics.archive.wlstore.PersistentStoreDataArchive.readRecord(PersistentStoreDataArchive.java:665)

           weblogic.diagnostics.archive.wlstore.PersistentRecordIterator.fill(PersistentRecordIterator.java:89)

           weblogic.diagnostics.archive.RecordIterator.fetchMore(RecordIterator.java:157)

           weblogic.diagnostics.archive.RecordIterator.hasNext(RecordIterator.java:130)

           weblogic.diagnostics.collections.TimedIterator.hasNext(TimedIterator.java:35)

           weblogic.diagnostics.accessor.DataAccessRuntime.fetch(DataAccessRuntime.java:442)

           weblogic.diagnostics.accessor.DataAccessRuntime.fetch(DataAccessRuntime.java:432)

           sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

           sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

           sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

           java.lang.reflect.Method.invoke(Method.java:597)

           weblogic.management.jmx.modelmbean.WLSModelMBean.invoke(WLSModelMBean.java:437)

           com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:836)

           com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:761)

           weblogic.management.jmx.mbeanserver.WLSMBeanServerInterceptorBase$16.run(WLSMBeanServerInterceptorBase.java:447)

           weblogic.management.jmx.mbeanserver.WLSMBeanServerInterceptorBase.invoke(WLSMBeanServerInterceptorBase.java:445)

           weblogic.management.mbeanservers.internal.SecurityInterceptor.invoke(SecurityInterceptor.java:443)

           weblogic.management.mbeanservers.internal.AuthenticatedSubjectInterceptor$10$1.run(AuthenticatedSubjectInterceptor.java:582)

           weblogic.management.mbeanservers.internal.AuthenticatedSubjectInterceptor$10.run(AuthenticatedSubjectInterceptor.java:580)

           weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)

           weblogic.management.mbeanservers.internal.AuthenticatedSubjectInterceptor.invoke(AuthenticatedSubjectInterceptor.java:573)

           weblogic.management.jmx.mbeanserver.WLSMBeanServer.invoke(WLSMBeanServer.java:307)

           javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1426)

           javax.management.remote.rmi.RMIConnectionImpl.access$200(RMIConnectionImpl.java:72)

           javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1264)

           javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1366)

           javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:788)

           javax.management.remote.rmi.RMIConnectionImpl_WLSkel.invoke(Unknown Source)

           weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:589)

           weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:477)

           weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)

           weblogic.security.service.SecurityManager.runAs(Unknown Source)

           weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:473)

           weblogic.rmi.internal.wls.WLSExecuteRequest.run(WLSExecuteRequest.java:118)

           weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)

           weblogic.work.ExecuteThread.run(ExecuteThread.java:173)

      "AS400 Read Daemon-33" RUNNABLE native

           jrockit.net.SocketNativeIO.readBytesPinned(Native Method)

           jrockit.net.SocketNativeIO.socketRead(SocketNativeIO.java:32)

           java.net.SocketInputStream.socketRead0(SocketInputStream.java)

           java.net.SocketInputStream.read(SocketInputStream.java:129)

           com.ibm.as400.access.DataStream.readFromStream(DataStream.java:48)

           com.ibm.as400.access.ClientAccessDataStream.construct(ClientAccessDataStream.java:46)

           com.ibm.as400.access.AS400ThreadedServer.run(AS400ThreadedServer.java:321)

           java.lang.Thread.run(Thread.java:619)

      "[STANDBY] ExecuteThread: '26' for queue: 'weblogic.kernel.Default (self-tuning)'" waiting for lock weblogic.work.ExecuteThread@1c78d940 WAITING

           java.lang.Object.wait(Object.java:485)

           weblogic.work.ExecuteThread.waitForRequest(ExecuteThread.java:157)

           weblogic.work.ExecuteThread.run(ExecuteThread.java:178)

      "AS400 Read Daemon-34" RUNNABLE native

           jrockit.net.SocketNativeIO.readBytesPinned(Native Method)

           jrockit.net.SocketNativeIO.socketRead(SocketNativeIO.java:32)

           java.net.SocketInputStream.socketRead0(SocketInputStream.java)

           java.net.SocketInputStream.read(SocketInputStream.java:129)

           com.ibm.as400.access.DataStream.readFromStream(DataStream.java:48)

           com.ibm.as400.access.ClientAccessDataStream.construct(ClientAccessDataStream.java:46)

           com.ibm.as400.access.AS400ThreadedServer.run(AS400ThreadedServer.java:321)

           java.lang.Thread.run(Thread.java:619)

      "AS400 Read Daemon-35" RUNNABLE native

           jrockit.net.SocketNativeIO.readBytesPinned(Native Method)

           jrockit.net.SocketNativeIO.socketRead(SocketNativeIO.java:32)

           java.net.SocketInputStream.socketRead0(SocketInputStream.java)

           java.net.SocketInputStream.read(SocketInputStream.java:129)

           com.ibm.as400.access.DataStream.readFromStream(DataStream.java:48)

           com.ibm.as400.access.ClientAccessDataStream.construct(ClientAccessDataStream.java:46)

           com.ibm.as400.access.AS400ThreadedServer.run(AS400ThreadedServer.java:321)

           java.lang.Thread.run(Thread.java:619)

      "AS400 Read Daemon-36" RUNNABLE native

           jrockit.net.SocketNativeIO.readBytesPinned(Native Method)

           jrockit.net.SocketNativeIO.socketRead(SocketNativeIO.java:32)

           java.net.SocketInputStream.socketRead0(SocketInputStream.java)

           java.net.SocketInputStream.read(SocketInputStream.java:129)

           com.ibm.as400.access.DataStream.readFromStream(DataStream.java:48)

           com.ibm.as400.access.ClientAccessDataStream.construct(ClientAccessDataStream.java:46)

           com.ibm.as400.access.AS400ThreadedServer.run(AS400ThreadedServer.java:321)

           java.lang.Thread.run(Thread.java:619)

      "AS400 Read Daemon-98" RUNNABLE native

           jrockit.net.SocketNativeIO.readBytesPinned(Native Method)

           jrockit.net.SocketNativeIO.socketRead(SocketNativeIO.java:32)

           java.net.SocketInputStream.socketRead0(SocketInputStream.java)

           java.net.SocketInputStream.read(SocketInputStream.java:129)

           com.ibm.as400.access.DataStream.readFromStream(DataStream.java:48)

           com.ibm.as400.access.ClientAccessDataStream.construct(ClientAccessDataStream.java:46)

           com.ibm.as400.access.AS400ThreadedServer.run(AS400ThreadedServer.java:321)

           java.lang.Thread.run(Thread.java:619)

      "AS400 Read Daemon-46" RUNNABLE native

           jrockit.net.SocketNativeIO.readBytesPinned(Native Method)

           jrockit.net.SocketNativeIO.socketRead(SocketNativeIO.java:32)

           java.net.SocketInputStream.socketRead0(SocketInputStream.java)

           java.net.SocketInputStream.read(SocketInputStream.java:129)

           com.ibm.as400.access.DataStream.readFromStream(DataStream.java:48)

           com.ibm.as400.access.ClientAccessDataStream.construct(ClientAccessDataStream.java:46)

           com.ibm.as400.access.AS400ThreadedServer.run(AS400ThreadedServer.java:321)

           java.lang.Thread.run(Thread.java:619)

      "AS400 Read Daemon-47" RUNNABLE native

           jrockit.net.SocketNativeIO.readBytesPinned(Native Method)

           jrockit.net.SocketNativeIO.socketRead(SocketNativeIO.java:32)

           java.net.SocketInputStream.socketRead0(SocketInputStream.java)

           java.net.SocketInputStream.read(SocketInputStream.java:129)

           com.ibm.as400.access.DataStream.readFromStream(DataStream.java:48)

           com.ibm.as400.access.ClientAccessDataStream.construct(ClientAccessDataStream.java:46)

           com.ibm.as400.access.AS400ThreadedServer.run(AS400ThreadedServer.java:321)

           java.lang.Thread.run(Thread.java:619)

      "AS400 Read Daemon-48" RUNNABLE native

           jrockit.net.SocketNativeIO.readBytesPinned(Native Method)

           jrockit.net.SocketNativeIO.socketRead(SocketNativeIO.java:32)

           java.net.SocketInputStream.socketRead0(SocketInputStream.java)

           java.net.SocketInputStream.read(SocketInputStream.java:129)

           com.ibm.as400.access.DataStream.readFromStream(DataStream.java:48)

           com.ibm.as400.access.ClientAccessDataStream.construct(ClientAccessDataStream.java:46)

           com.ibm.as400.access.AS400ThreadedServer.run(AS400ThreadedServer.java:321)

           java.lang.Thread.run(Thread.java:619)

      "AS400 Read Daemon-96" RUNNABLE native

           jrockit.net.SocketNativeIO.readBytesPinned(Native Method)

           jrockit.net.SocketNativeIO.socketRead(SocketNativeIO.java:32)

           java.net.SocketInputStream.socketRead0(SocketInputStream.java)

           java.net.SocketInputStream.read(SocketInputStream.java:129)

           com.ibm.as400.access.DataStream.readFromStream(DataStream.java:48)

           com.ibm.as400.access.ClientAccessDataStream.construct(ClientAccessDataStream.java:46)

           com.ibm.as400.access.AS400ThreadedServer.run(AS400ThreadedServer.java:321)

           java.lang.Thread.run(Thread.java:619)

      "AS400 Read Daemon-97" RUNNABLE native

           jrockit.net.SocketNativeIO.readBytesPinned(Native Method)

           jrockit.net.SocketNativeIO.socketRead(SocketNativeIO.java:32)

           java.net.SocketInputStream.socketRead0(SocketInputStream.java)

           java.net.SocketInputStream.read(SocketInputStream.java:129)

           com.ibm.as400.access.DataStream.readFromStream(DataStream.java:48)

           com.ibm.as400.access.ClientAccessDataStream.construct(ClientAccessDataStream.java:46)

           com.ibm.as400.access.AS400ThreadedServer.run(AS400ThreadedServer.java:321)

           java.lang.Thread.run(Thread.java:619)
        • 1. Re: One of the managed Server utilizing more space. ??
          Arunbodap-Oracle
          Looks like you have a WLDF (WebLogic Diagnostic Framework) collection turned on the managed server as per the thread stack.
          If you have knowingly configured WLDF, please remove it and test it.


          Arun
          • 2. Re: One of the managed Server utilizing more space. ??
            JZWL
            thanks for the reply

            Is this specifc to a server or for all the servers under the domain ? It was not configured knowingly anyway.

            Is there any way to disable it from console, rather than the config file changes?

            thanks,
            Jasheer
            • 3. Re: One of the managed Server utilizing more space. ??
              JZWL
              hi,

              I checked it more on the diagnostics part, and it is defenitely the diagnostics that creates this issue with one of my managed server which size upto huge 150GB under the server/data/store/diagnostics folder.

              but the other managed server diagnostics data size looks fine .


              could you please give me some poniter to get rid of this unwanted diagnostics data getting created for the managed servers.

              thanks
              JZWL
              • 4. Re: One of the managed Server utilizing more space. ??
                Arunbodap-Oracle
                We first need to understand why the diagnostic information is being collected on that particular server.
                Please check what is WLDF watch/rule or collection configured for in your environment.
                May be there is an issue on that server due to which it is collecting huge data. If I have further details, I might be able to help.


                Arun
                • 5. Re: One of the managed Server utilizing more space. ??
                  JZWL
                  hi Arun,


                  Please find the below diagnostic module config fom the condig.xml

                  <server-diagnostic-config>
                  <data-retirement-enabled>true</data-retirement-enabled>
                  <wldf-data-retirement-by-age>
                  <name>DomainHealth_WLDFRetirePolicy_m2ap5</name>
                  <enabled>true</enabled>
                  <archive-name>HarvestedDataArchive</archive-name>
                  <retirement-time>2</retirement-time>
                  <retirement-period>6</retirement-period>
                  <retirement-age>1</retirement-age>
                  </wldf-data-retirement-by-age>
                  </server-diagnostic-config>

                  This configuration was present earlier also, but it looks like the logs statrted accumulating recently due to some other changes made to console. There is nothing coming under the WLDF console extension in server admin console.

                  Other than changing the start script, will it be fine to go the file location ./server/data/store/diagnostics/WLSDIAGNOSTIC**.DAT and delete the older file while the server is running now?

                  Incase not posisible , an example on the change in startscript and the config.xml will b helpful


                  thanks
                  JZWL
                  • 6. Re: One of the managed Server utilizing more space. ??
                    JZWL
                    The space consumption was due to the huge diagnostic logs produced due to the jdbc profiling options configured on in the administration console
                    • 7. Re: One of the managed Server utilizing more space. ??
                      Arunbodap-Oracle
                      I am not really comfortable suggesting you to delete the WLSDIAGNOSTIC**.DAT files for a running server.
                      If you have restarted the server and the files were from the previous run then you can delete them.

                      The JDBC connection pool might have been targeted to both the servers. So, then why the collection is high on only one managed server.
                      Is it possible that there is some issue with the JDBC Connection Pool on that server?
                      Can we check and try to fix it. I believe that will be the best way forward.


                      Arun