komoot / photon

an open source geocoder for openstreetmap data
Apache License 2.0
1.91k stars 281 forks source link

unable to load JNA native support library #766

Closed kanik588 closed 8 months ago

kanik588 commented 9 months ago

Hi, photon is running and responsing to queries but very slow.

java -jar photon-0.4.3.jar -listen-port 9999 2023-12-26 13:05:11,229 [main] WARN org.elasticsearch.node.Node - version [5.6.16-SNAPSHOT] is a pre-release version of Elasticsearch and is not suitable for production 2023-12-26 13:05:15,149 [main] WARN org.elasticsearch.bootstrap.Natives - unable to load JNA native support library, native methods will be disabled. java.lang.UnsatisfiedLinkError: /tmp/jna--227869329/jna7751400914706154660.tmp: /tmp/jna--227869329/jna7751400914706154660.tmp: failed to map segment from shared object: Operation not permitted at java.lang.ClassLoader$NativeLibrary.load(Native Method) ~[?:1.8.0_392] at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1934) ~[?:1.8.0_392] at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1817) ~[?:1.8.0_392] at java.lang.Runtime.load0(Runtime.java:782) ~[?:1.8.0_392] at java.lang.System.load(System.java:1100) ~[?:1.8.0_392] at com.sun.jna.Native.loadNativeDispatchLibraryFromClasspath(Native.java:947) ~[photon-0.4.3.jar:?] at com.sun.jna.Native.loadNativeDispatchLibrary(Native.java:922) ~[photon-0.4.3.jar:?] at com.sun.jna.Native.(Native.java:190) ~[photon-0.4.3.jar:?] at java.lang.Class.forName0(Native Method) ~[?:1.8.0_392] at java.lang.Class.forName(Class.java:264) ~[?:1.8.0_392] at org.elasticsearch.bootstrap.Natives.(Natives.java:45) ~[photon-0.4.3.jar:?] at org.elasticsearch.bootstrap.BootstrapInfo.isMemoryLocked(BootstrapInfo.java:50) ~[photon-0.4.3.jar:?] at org.elasticsearch.monitor.process.ProcessProbe.processInfo(ProcessProbe.java:130) ~[photon-0.4.3.jar:?] at org.elasticsearch.monitor.process.ProcessService.(ProcessService.java:47) ~[photon-0.4.3.jar:?] at org.elasticsearch.monitor.MonitorService.(MonitorService.java:46) ~[photon-0.4.3.jar:?] at org.elasticsearch.node.Node.(Node.java:362) ~[photon-0.4.3.jar:?] at de.komoot.photon.elasticsearch.Server$MyNode.(Server.java:64) ~[photon-0.4.3.jar:?] at de.komoot.photon.elasticsearch.Server.start(Server.java:110) ~[photon-0.4.3.jar:?] at de.komoot.photon.App.main(App.java:31) ~[photon-0.4.3.jar:?]

otbutz commented 8 months ago

Which mount options are you using for /tmp ?

kanik588 commented 8 months ago

where are the mount options?

otbutz commented 8 months ago

Can you post the content of your fstab?

cat /etc/fstab

Please redact any hardcoded credentials.

kanik588 commented 8 months ago

#

/etc/fstab

Created by anaconda on Wed Jul 25 03:26:49 2018

#

Accessible filesystems, by reference, are maintained under '/dev/disk'

See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

# UUID=567caf1c-2cc5-43ad-b55a-bf9695e865be / ext4 usrjquota=quota.user,jqfmt=vfsv0 1 UUID=7534e6ea-4c4f-4380-aa29-05d135d36f0c /boot ext4 defaults 1 2 UUID=a736d6cc-0d56-4bfe-b594-4225c29f56fc /tmp ext4 defaults 1 2 UUID=238d3570-8437-4cb7-9eb3-fe7ad03f8a47 swap swap defaults 0 0 /dev/sdb1 /home2 ext4 defaults 0 0

otbutz commented 8 months ago

That looks as expected. Could you check the permissions?

ls -lah /tmp

The directory itself should be owned by root and be readable/writeable for everybody:

drwxrwxrwt 20 root  root   16K Jan 11 13:17 .
kanik588 commented 8 months ago

its not a good idea. how to set another path for temp?

otbutz commented 8 months ago

its not a good idea.

That's the default. Anything else is a recipe for disaster.

https://unix.stackexchange.com/a/71625

chown root:root /tmp
chmod 1777 /tmp
kanik588 commented 8 months ago

still i have error.

java -jar photon-0.4.3.jar -listen-port 9999 2024-01-11 16:50:09,113 [main] WARN org.elasticsearch.node.Node - version [5.6.16-SNAPSHOT] is a pre-release version of Elasticsearch and is not suitable for production 2024-01-11 16:50:18,503 [main] WARN org.elasticsearch.bootstrap.Natives - unable to load JNA native support library, native methods will be disabled. java.lang.UnsatisfiedLinkError: /tmp/jna--1394926960/jna1063817280630509643.tmp: /tmp/jna--1394926960/jna1063817280630509643.tmp: failed to map segment from shared object: Operation not permitted at java.lang.ClassLoader$NativeLibrary.load(Native Method) ~[?:1.8.0_392] at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1934) ~[?:1.8.0_392] at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1817) ~[?:1.8.0_392] at java.lang.Runtime.load0(Runtime.java:782) ~[?:1.8.0_392] at java.lang.System.load(System.java:1100) ~[?:1.8.0_392] at com.sun.jna.Native.loadNativeDispatchLibraryFromClasspath(Native.java:947) ~[photon-0.4.3.jar:?] at com.sun.jna.Native.loadNativeDispatchLibrary(Native.java:922) ~[photon-0.4.3.jar:?] at com.sun.jna.Native.(Native.java:190) ~[photon-0.4.3.jar:?] at java.lang.Class.forName0(Native Method) ~[?:1.8.0_392] at java.lang.Class.forName(Class.java:264) ~[?:1.8.0_392] at org.elasticsearch.bootstrap.Natives.(Natives.java:45) ~[photon-0.4.3.jar:?] at org.elasticsearch.bootstrap.BootstrapInfo.isMemoryLocked(BootstrapInfo.java:50) ~[photon-0.4.3.jar:?] at org.elasticsearch.monitor.process.ProcessProbe.processInfo(ProcessProbe.java:130) ~[photon-0.4.3.jar:?] at org.elasticsearch.monitor.process.ProcessService.(ProcessService.java:47) ~[photon-0.4.3.jar:?] at org.elasticsearch.monitor.MonitorService.(MonitorService.java:46) ~[photon-0.4.3.jar:?] at org.elasticsearch.node.Node.(Node.java:362) ~[photon-0.4.3.jar:?] at de.komoot.photon.elasticsearch.Server$MyNode.(Server.java:64) ~[photon-0.4.3.jar:?] at de.komoot.photon.elasticsearch.Server.start(Server.java:110) ~[photon-0.4.3.jar:?] at de.komoot.photon.App.main(App.java:31) ~[photon-0.4.3.jar:?] 2024-01-11 16:50:31,138 [main] INFO de.komoot.photon.elasticsearch.Server - started elastic search node 2024-01-11 16:50:31,138 [main] INFO de.komoot.photon.App - Make sure that the ES cluster is ready, this might take some time. 2024-01-11 16:50:40,950 [main] INFO de.komoot.photon.App - ES cluster is now ready.

otbutz commented 8 months ago

I'd try to remove any remains from previous runs.

find /tmp -maxdepth 1 -name 'jna--*'  -exec rm -rf "{}" \;

It might be also worth to investigate the default mount options used by your distribution:

mount | grep /tmp
kanik588 commented 8 months ago

(base) root@ [~]# find /tmp -maxdepth 1 -name 'jna--*' -exec rm -rf "{}" \; (base) root@ [~]# mount | grep /tmp /dev/sda5 on /tmp type ext4 (rw,nosuid,noexec,relatime,seclabel,data=ordered) /dev/sda5 on /var/tmp type ext4 (rw,nosuid,noexec,relatime,seclabel,data=ordered) /dev/sda5 on /home/virtfs/abbas/tmp type ext4 (rw,nosuid,noexec,relatime,seclabel,data=ordered) /dev/sda5 on /home/virtfs/abbas/var/tmp type ext4 (rw,nosuid,noexec,relatime,seclabel,data=ordered) (base) root@ [~]#

still same error

2024-01-11 17:15:19,995 [main] WARN org.elasticsearch.bootstrap.Natives - unable to load JNA native support library, native methods will be disabled. java.lang.UnsatisfiedLinkError: /tmp/jna--1394926960/jna3660516763353728117.tmp: /tmp/jna--1394926960/jna3660516763353728117.tmp: failed to map segment from shared object: Operation not permitted

otbutz commented 8 months ago

noexec is the culprit here.

You could try the mentioned workaround using -Djna.tmpdir=<path>:

https://www.elastic.co/guide/en/elasticsearch/reference/current/executable-jna-tmpdir.html

kanik588 commented 8 months ago

this worked for me

java -Djna.tdir=/home2/myaccount/public_html/tmp -jar photon-0.4.3.jar -listen-port 9999

thank you

lonvia commented 8 months ago

This seems resolved.