abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 15:11 | Komunita

    Na webu konference Den IPv6, která se konala 4. června v Národní technické knihovně v pražských Dejvicích, jsou nyní k dispozici všechny prezentace (v PDF) a jejich videozáznamy. Organizátory konference byly i letos sdružení CESNET, CZ.NIC a NIX.CZ.

    VSladek | Komentářů: 0
    dnes 13:11 | Nová verze

    Byla vydána nová verze 9.1.0 správce sbírky fotografií digiKam (Wikipedie). Přehled novinek i s náhledy v oficiálním oznámení (NEWS). Vypíchnout lze vylepšené vyhledávání nebo podporu Pixel Motion Photos. Nejnovější digiKam je ke stažení také jako balíček ve formátu AppImage. Stačí jej stáhnout, nastavit právo ke spuštění a spustit.

    Ladislav Hagara | Komentářů: 0
    dnes 11:44 | Pozvánky

    Přihlaste svou přednášku na další ročník konference LinuxDays, který proběhne 3. a 4. října na FIT ČVUT v pražských Dejvicích. Příjem témat poběží do konce prázdnin, pak proběhne veřejné hlasování a následně sestavení programu.

    Petr Krčmář | Komentářů: 2
    dnes 04:44 | Nová verze

    Byla vydána nová verze 2.4.68 svobodného multiplatformního webového serveru Apache (httpd). Řešeno je mimo jiné 13 zranitelností.

    Ladislav Hagara | Komentářů: 2
    včera 22:44 | IT novinky

    Apple na své vývojářské konferenci WWDC26 (Worldwide Developers Conference, keynote) představil řadu novinek. Vypíchnout lze novou generaci Apple Intelligence a zbrusu novou Siri, která dostala název Siri AI. Kvůli Aktu o digitálních trzích (DMA) však funkce Siri AI nebudou v systémech iOS 27 a iPadOS 27 k dispozici uživatelům v Evropské unii.

    Ladislav Hagara | Komentářů: 0
    včera 22:22 | Nová verze

    Byla vydána nová verze 1.18.0 distribučního frameworku Flatpak (Wikipedie), tj. technologie umožňující distribuovat aplikace v podobě jednoho instalačního souboru na různé linuxové distribuce a jejich různá vydání. Přehled novinek na GitHubu. Vypíchnout lze podporu rozhraní /dev/kfd pro výpočty na kartách AMD (AMDKFD).

    Ladislav Hagara | Komentářů: 0
    včera 20:44 | Nová verze

    aMule (Wikipedie), tj. multiplatformní klient pro peer-to-peer sdílení souborů pro sítě eD2k and Kademlia, byl po více než pěti letech od vydání poslední verze 2.3.3, vydán v nové major verzi 3.0.0 (GitHub). S novou webovou stránkou a dokumentací.

    Ladislav Hagara | Komentářů: 5
    včera 12:55 | IT novinky

    Byly vyhlášeni vítězové a zveřejněny vítězné zdrojové kódy (YouTube, GitHub) již 29. ročníku soutěže International Obfuscated C Code Contest (IOCCC), tj. soutěže o nejnepřehlednější (nejobfuskovanější) zdrojový kód v jazyce C.

    Ladislav Hagara | Komentářů: 0
    včera 12:44 | IT novinky

    Evropská komise předložila evropský balíček pro technologickou suverenitu, tedy soubor opatření, která mají posílit kapacity EU v oblasti polovodičů, umělé inteligence, cloudu a open source. To Evropě pomůže stát se lídrem v oblasti umělé inteligence, posílit její digitální autonomii a vytvářet podmínky pro udržitelnější digitální budoucnost.

    Ladislav Hagara | Komentářů: 14
    včera 04:44 | Nová verze

    OpenCV (Open Source Computer Vision, Wikipedie), tj. open source multiplatformní knihovna pro zpracování obrazu a počítačové vidění, byla vydána v nové major verzi 5.

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (11%)
     (8%)
     (2%)
     (15%)
     (31%)
     (3%)
     (6%)
     (3%)
     (15%)
     (26%)
    Celkem 1855 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník


    Dotaz: Trvale zablokovaný socket v Javě

    Luboš Doležel (Doli) avatar 25.7.2011 20:01 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
    Trvale zablokovaný socket v Javě
    Přečteno: 414×
    Ahoj, řeším na Ábíčku problém s načítáním RSS, kdy se načítací vlákno natrvalo zasekne a nikdy se neodblokuje. jstack ukazuje toto:
    "links scheduler" daemon prio=10 tid=0x00007fdb642d8800 nid=0x442e runnable [0x00007fdb61d24000]
       java.lang.Thread.State: RUNNABLE
    	at java.net.SocketInputStream.socketRead0(Native Method)
    	at java.net.SocketInputStream.read(SocketInputStream.java:129)
    	at java.io.BufferedInputStream.read1(BufferedInputStream.java:256)
    	at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
    	- locked <0x00000000a79a4be8> (a java.io.BufferedInputStream)
    	at sun.net.www.MeteredStream.read(MeteredStream.java:116)
    	- locked <0x00000000a79a4bc0> (a sun.net.www.MeteredStream)
    	at java.io.FilterInputStream.read(FilterInputStream.java:116)
    	at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2672)
    	at java.io.BufferedInputStream.read1(BufferedInputStream.java:256)
    	at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
    	- locked <0x00000000a79a7558> (a java.io.BufferedInputStream)
    	at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
    	at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
    	at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
    	- locked <0x00000000a79a7580> (a java.io.InputStreamReader)
    	at sun.nio.cs.StreamDecoder.read0(StreamDecoder.java:107)
    	- locked <0x00000000a79a7580> (a java.io.InputStreamReader)
    	at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:151)
    	- locked <0x00000000a79a7580> (a java.io.InputStreamReader)
    	at java.io.InputStreamReader.read(InputStreamReader.java:167)
    	at com.sun.syndication.io.XmlReader.read(XmlReader.java:394)
    	at java.io.Reader.read(Reader.java:104)
    	at com.sun.syndication.io.impl.XmlFixerReader.read(XmlFixerReader.java:215)
    	at com.sun.syndication.io.impl.XmlFixerReader.read(XmlFixerReader.java:299)
    	at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(XMLEntityScanner.java:1742)
    	at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.skipChar(XMLEntityScanner.java:1416)
    	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2792)
    	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
    	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
    	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
    	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
    	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
    	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
    	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
    	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
    	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:453)
    	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:851)
    	at com.sun.syndication.io.WireFeedInput.build(WireFeedInput.java:194)
    	at com.sun.syndication.io.SyndFeedInput.build(SyndFeedInput.java:123)
    	at cz.abclinuxu.scheduler.UpdateLinks.parseRSS(UpdateLinks.java:240)
    	at cz.abclinuxu.scheduler.UpdateLinks.synchronize(UpdateLinks.java:166)
    	at cz.abclinuxu.scheduler.UpdateLinks.run(UpdateLinks.java:126)
    	at java.util.TimerThread.mainLoop(Timer.java:512)
    	at java.util.TimerThread.run(Timer.java:462)
    
    V kódu bylo odjakživa nastaveno toto, ale evidentně to nemá žádný dopad:
    System.setProperty ("sun.net.client.defaultReadTimeout", "7000");
    System.setProperty ("sun.net.client.defaultConnectTimeout", "7000");
    Řádek, který blokuje, vypadá takto:
    SyndFeed feed = input.build(new XmlReader(new URL(rssUrl)));
    netstat ukazuje tento řádek se spojením, na kterém to visí:
    tcp6       0      0 82.208.17.52:60328      208.93.0.168:80         SPOJENO    
    Podle wiresharku se už na tomto socketu žádné pakety nevyměňují a stojí to a stojí... Máte nápad, co s tím?

    Odpovědi

    25.7.2011 20:49 petr_p | skóre: 59 | blog: pb
    Rozbalit Rozbalit vše Re: Trvale zablokovaný socket v Javě

    S javou zkušenosti nemám, ale podle výpisu to tipuji na uváznutí:

    at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
    	- locked <0x00000000a79a7580> (a java.io.InputStreamReader)
    	at sun.nio.cs.StreamDecoder.read0(StreamDecoder.java:107)
    	- locked <0x00000000a79a7580> (a java.io.InputStreamReader)
    	at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:151)
    	- locked <0x00000000a79a7580> (a java.io.InputStreamReader)
    	at java.io.InputStreamReader.read(InputStreamReader.java:167)

    Předpokládám, že 0x00000000a79a7580 je adresa zámku. Podívejte se do zdrojáku, co se tam má dít.

    Netstat tvrdí, že žádná data v jaderném bufferu socketu nečekají, až si je aplikace přečte.

    Můžete zkusit odesláním TCP FIN packetu se správným sekvenčním číslem TCP spojení uzavřít a tím ověřit, jestli vlákno opravdo uvázlo. (Například nástrojem hping, existuje i specializované udělátko, na jehož název si teď nevzpomenu.)

    Luboš Doležel (Doli) avatar 25.7.2011 21:08 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
    Rozbalit Rozbalit vše Re: Trvale zablokovaný socket v Javě
    Myslím si, že ty zámky jsou v pořádku, protože se to přes ně dostalo až do nativní metody a navíc je vlákno RUNNABLE.

    Za tip s podvržením FIN paketu děkuju.
    26.7.2011 09:17 Filip Jirsák | skóre: 67 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: Trvale zablokovaný socket v Javě
    Ve výchozím nastavení je tam timeout -1 (čekat donekonečna), a podle mne není možnost to nastavit přes systémovou vlastnost (ty vlastnosti uvedené v dotazu to neovlivňují). Ono je lepší vyhnout se téhle automatice, kdy se z URL rovnou na pozadí vytvoří stream – nedá se tam pak nic nakonfigurovat ani řídit. Tady je podle mne jediná možnost – z toho URL si ručně vytvořit URLConnection, tam nastavit connectionTimeout, a už nakonfigurované URLConnection pak předat XMLReaderu. A nebo se úplně vykašlat na implementaci HTTP klienta od Sunu a použít třeba Apache HttpComponents – k tomu Sunovskému nemám moc důvěru, nedá se moc konfigurovat ani řídit, a nevypadá moc odladěně (ten kód se v průběhu jednotlivých updatů JRE/JDK pořád mění a opravují se tam dost podstatné chyby).
    26.7.2011 12:08 Filip Jirsák | skóre: 67 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: Trvale zablokovaný socket v Javě
    Ještě k tomu samotnému spojení – chtělo by to podívat se do té HTTP komunikace. Jestli se tam třeba neposílají Keep-Alive hlavičky a spojení se tedy neudržuje otevřené záměrně. Jinak při HTTP komunikaci by spojení měl uzavírat server, takže pokud spojení neuzavřel, je chyba na druhé straně (a problém s timeoutem je až chybné řešení této chyby).
    26.7.2011 11:53 Ivan
    Rozbalit Rozbalit vše Re: Trvale zablokovaný socket v Javě
    Ty pouzivas IPv6? Jakou verzi JVM pouzivas? Pokud pamatuju tak IPv6 bylo v Java silene zabugovany. Pro dalsi investigaci muzes:

    - poslat vystup z tcpdumpu/(wiresharku) a zjisitit kdo komu poslal posledni packet

    - attachnout strace/(nebo jeste lepe gdb) k JVM a zjistit na jaky syscall v kernelu JVM ceka

    - spustit netstat na protistrane.

    PS: ty dve nuly ve vypisu netstatu znamenaji, ze nic neni v read/write bufferu TCP socketu v kernelu.
    Luboš Doležel (Doli) avatar 26.7.2011 12:32 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
    Rozbalit Rozbalit vše Re: Trvale zablokovaný socket v Javě
    java version "1.6.0_26"

    Schválně jsem zkusil IPv6 stack zakázat (nebojte, Ábíčko přes IPv6 stále běží dál) - to mě zajímá. Jinak jsem přepsal kód, aby se timeouty nastavovaly přímo na URLConnection, ale to nasadím až pak. Bohužel jsem narazil na zmínky, že timeouty u URLConnection nefungují moc spolehlivě.

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.