Please make sure that hbase-site.xml is in classpath of your app.

On Sat, Sep 19, 2015 at 6:32 AM, zz d <zzd7...@gmail.com> wrote:

> Version: phoenix-4.5.0-HBase-0.98
>
> Program Exception:
>
> ```
> java.lang.OutOfMemoryError: unable to create new native thread
>         at java.lang.Thread.start0(Native Method)
>         at java.lang.Thread.start(Thread.java:714)
>         at
> java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:949)
>         at
> java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1360)
>         at
> java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:132)
>         at
> org.apache.hadoop.hbase.client.HTable.coprocessorService(HTable.java:1625)
>         at
> org.apache.hadoop.hbase.client.HTable.coprocessorService(HTable.java:1598)
>         at
> org.apache.phoenix.cache.ServerCacheClient.removeServerCache(ServerCacheClient.java:308)
>         at
> org.apache.phoenix.cache.ServerCacheClient.access$000(ServerCacheClient.java:82)
> ```
>
> I found that the program had created too many threads.
>
> I read the HBase code and found the max threads number is determined by
> `hbase.htable.threads.max`
>
> ```
> public static ThreadPoolExecutor getDefaultExecutor(Configuration conf) {
>     int maxThreads = conf.getInt("hbase.htable.threads.max",
> Integer.MAX_VALUE);
>     if (maxThreads == 0) {
>       maxThreads = 1; // is there a better default?
>     }
>     long keepAliveTime =
> conf.getLong("hbase.htable.threads.keepalivetime", 60);
>
>     // Using the "direct handoff" approach, new threads will only be
> created
>     // if it is necessary and will grow unbounded. This could be bad but
> in HCM
>     // we only create as many Runnables as there are region servers. It
> means
>     // it also scales when new region servers are added.
>     ThreadPoolExecutor pool = new ThreadPoolExecutor(1, maxThreads,
> keepAliveTime, TimeUnit.SECONDS,
>         new SynchronousQueue<Runnable>(),
> Threads.newDaemonThreadFactory("htable"));
>     ((ThreadPoolExecutor) pool).allowCoreThreadTimeOut(true);
>     return pool;
>   }
> ```
>
> This parameter can be found in phoenix code and its document here:
> https://phoenix.apache.org/secondary_indexingha.html
>
> I set the parameter in `hbase-site.xml` and restart the hbase. I also use
> the `hbase-site.xml` in client side, but the threads number in my client do
> not reduce.
>
> How can I control the threads in client?
>
> Thanks !
>



-- 
Thanks & Regards,
Anil Gupta

Reply via email to