-Xss is translated in a VM flag named ThreadStackSize, 是-XX:ThreadStackSize的简写形式, 即线程栈的大小, 单位kb
-Xsssize
Sets the thread stack size (in bytes). Append the letter k or K to indicate KB, m or M to indicate MB, g or G to indicate GB. The default value depends on the platform:
Linux/ARM (32-bit): 320 KB
Linux/i386 (32-bit): 320 KB
Linux/x64 (64-bit): 1024 KB
OS X (64-bit): 1024 KB
Oracle Solaris/i386 (32-bit): 320 KB
Oracle Solaris/x64 (64-bit): 1024 KB
The following examples set the thread stack size to 1024 KB in different units:
> javac OverStackTest.java > java -Xss256k OverStackTest deep of stack is 1887 > java -Xss512k OverStackTest deep of stack is 7428 > java -Xss670k OverStackTest deep of stack is 7616
在第一种情况下, 线程将处于 “Runnable”的状态, 而第二种情况下, 线程 DUMP会显示处于 “waiting for monitor entry”。如下所示:
1 2 3 4 5
"Thread-0" prio=10 tid=0x08222eb0 nid=0x9 waiting for monitor entry [0xf927b000..0xf927bdb8] at testthread.WaitThread.run(WaitThread.java:39) - waiting to lock <0xef63bf08> (a java.lang.Object) - locked <0xef63beb8> (a java.util.ArrayList) at java.lang.Thread.run(Thread.java:595)
"Thread-1" prio=10 tid=0x08223250 nid=0xa in Object.wait() [0xef47a000..0xef47aa38] at java.lang.Object.wait(Native Method) - waiting on <0xef63beb8> (a java.util.ArrayList) at java.lang.Object.wait(Object.java:474) at testthread.MyWaitThread.run(MyWaitThread.java:40) - locked <0xef63beb8> (a java.util.ArrayList) at java.lang.Thread.run(Thread.java:595)
仔细观察上面的 DUMP信息, 你会发现它有以下两行:
locked <0xef63beb8> (a java.util.ArrayList)
waiting on <0xef63beb8> (a java.util.ArrayList) 这里需要解释一下, 为什么先 lock了这个对象, 然后又 waiting on同一个对象呢?让我们看看这个线程对应的代码:
"Thread-1" prio=5 tid=0x00acc490 nid=0xe50 waiting for monitor entry [0x02d3f000 ..0x02d3fd68] at deadlockthreads.TestThread.run(TestThread.java:31) - waiting to lock <0x22c19f18> (a java.lang.Object) - locked <0x22c19f20> (a java.lang.Object) "Thread-0" prio=5 tid=0x00accdb0 nid=0xdec waiting for monitor entry [0x02cff000 ..0x02cff9e8] at deadlockthreads.TestThread.run(TestThread.java:31) - waiting to lock <0x22c19f20> (a java.lang.Object) - locked <0x22c19f18> (a java.lang.Object)
Found one Java-level deadlock: ============================= "Thread-1": waiting to lock monitor 0x0003f334 (object 0x22c19f18, a java.lang.Object), which is held by "Thread-0" "Thread-0": waiting to lock monitor 0x0003f314 (object 0x22c19f20, a java.lang.Object), which is held by "Thread-1"
final void pushTask(ForkJoinTask t) { ForkJoinTask[] q; int s, m; if ((q = queue) != null) { // ignore if queue removed long u = (((s = queueTop) & (m = q.length - 1)) << ASHIFT) + ABASE; UNSAFE.putOrderedObject(q, u, t); queueTop = s + 1; // or use putOrderedInt if ((s -= queueBase) <= 2) pool.signalWork(); else if (s == m) growQueue(); } }
public final V join() { if (doJoin() != NORMAL) return reportResult(); else return getRawResult(); } private V reportResult() { int s; Throwable ex; if ((s = status) == CANCELLED) throw new CancellationException(); if (s == EXCEPTIONAL && (ex = getThrowableException()) != null) UNSAFE.throwException(ex); return getRawResult(); }
docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f7c2d84561dd hub.c.163.com/public/centos "/usr/sbin/sshd -D" 7 minutes ago Up 7 minutes 0.0.0.0:32768->22/tcp centos
docker exec -it centos /bin/bash
文件拷贝
本地copy文件到container
1
docker cp ~/putMerge.jar hadoop0:~/
container文件copy到本地
1
docker cp hadoop0:~/putMerge.jar ~/
images 重命名
1 2 3 4
docker tag IMAGEID(镜像id) REPOSITORY:TAG(仓库:标签) #例子 docker tag ca1b6b825289 reffs/xxxxxxx:v1.0
/** * A VectorizedRowBatch is a set of rows, organized with each column * as a vector. It is the unit of query execution, organized to minimize * the cost per row and achieve high cycles-per-instruction. * The major fields are public by design to allow fast and convenient * access by the vectorized query execution code. */
@Override publicvoidwrite(NullWritable nullWritable, V v)throws IOException { // if the batch is full, write it out. if (batch.size == batch.getMaxSize()) { writer.addRowBatch(batch); batch.reset(); }
// add the new row introw= batch.size++; // skip over the OrcKey or OrcValue if (v instanceof OrcKey) { v = (V)((OrcKey) v).key; } elseif (v instanceof OrcValue) { v = (V)((OrcValue) v).value; } if (isTopStruct) { for(intf=0; f < schema.getChildren().size(); ++f) { OrcMapredRecordWriter.setColumn(schema.getChildren().get(f), batch.cols[f], row, ((OrcStruct) v).getFieldValue(f)); } } else { OrcMapredRecordWriter.setColumn(schema, batch.cols[0], row, v); } }