Closed lexus300h closed 7 years ago
This doesn't look like something related to fast_tls to me, this process from which this queue comes is responsible for loading erlang beam files. Do you really have all those fast_tls_drv.so in all those dirs? Maybe you have some recursive symlink here?
I used ejabberd1407, and opened the tls. I can't find the place of those gen calls. Can you give me some tips, Thanks.
I am guessing this is from erlang system code that tires to load/locate fast_tls_drv.so file. Do you really have all those files in: /home/q/erlang1705/lib/erlang/lib/megaco-3.17.3/ebin/priv/lib/fast_tls_drv.so /home/q/erlang1705/lib/erlang/lib/compiler-5.0.4/ebin/priv/lib/fast_tls_drv.so
or it just iterates over all your library paths?
Could you look at your ejabberd installation and see where you have fast_tls_drv.so?
the path is /home/q/ejabberd1407/lib/ejabberd/priv/lib/fast_tls_drv.so. I just make and make install to install the ejabberd, doesn't change anything.
$ pwd /home/q/ejabberd1407 $ sudo find . -name fast_tls_drv.so ./lib/ejabberd/priv/lib/fast_tls_drv.so
Ok i am pretty sure ejabberd 14.07 don't use fast_tls_drv.so (when it was released it used p1_tls_drv), so i am not sure what tries to load it.
In never version of ejabberd files are installed differently, fast_tls_drv.so will be installed in ./lib/fast_tls-1.0.X/priv/lib/fast_tls_drv.so and this is where code that load this file looks first, but if it can't find it checks all registered library paths for that file, which i guess what happens here.
Updating to newer ejabberd, or trying to see why it tries to use fast_tls insteas od p1_tls will be a solution here.
thanks, it's me to update the tls deps. I try to update my ejabberd. Thanks.
For posterity, i added 0a8de230973278b8a2b1eea362a5d6b9ca328b58 that may help in cases where full search will be needed.
Got it. Thanks for your help.
when my server has 80, 000 TCP connections, the length of file_server_2's message_queue is grow quickly. When I check the process info ,I find this:
(ejabberd@xxxx)1> erlang:process_info(list_to_pid("<0.24.0>")). [{registered_name,file_server_2}, {current_function,{prim_file,drv_get_response,1}}, {initial_call,{proc_lib,init_p,5}}, {status,running}, {message_queue_len,37}, {messages,[{'$gen_call',{<0.29936.3282>,
Ref<0.0.11499.147076>},
{links,[#Port<0.112>,<0.11.0>]}, {dictionary,[{'$ancestors',[kernel_sup,<0.10.0>]}, {'$initial_call',{file_server,init,1}}]}, {trap_exit,true}, {error_handler,error_handler}, {priority,normal}, {group_leader,<0.9.0>}, {total_heap_size,225340}, {heap_size,28690}, {stack_size,30}, {reductions,249704733833}, {garbage_collection,[{min_bin_vheap_size,46422}, {min_heap_size,233}, {fullsweep_after,65535}, {minor_gcs,45393}]}, {suspending,[]}]
I can't understand why so many gen_call to get the file info of fast_tls_drv.so